2013-06-23 4 views
0

J'ai une liste et je veux créer une fonction qui affichera en gras l'élément de la liste cliquée. Jusqu'à présent, j'ai réussi à créer une fonction et l'assigner à la liste des éléments. Onclick, ça plait, mais juste un élément. Je ne sais pas comment le régler pour chaque article.Événement Onclick sur un tableau d'éléments de la liste

J'aurais pu utiliser id pour mettre en gras les éléments mais il y aura beaucoup d'éléments dans la liste. Je ne peux pas traiter avec chacun d'eux.

html

<ul> 
    <li>apple</li> 
    <li>orange</li> 
    <li>banana</li> 
</ul> 

javascript

var list = document.getElementsByTagName("li"); 

function markSelection() { 
    if(list[0].style.fontWeight !== "bold") { 
     list[0].style.fontWeight = "bold"; 
    } else { 
     list[0].style.fontWeight = "normal"; 
    } 
} 

for (i = 0, len = list.length; i < len; i++){ 
    list[i].onclick = markSelection; 
} 

Il Bolds seule liste [0]. Comment puis-je le mettre en gras dans l'élément de la liste cliquée?

jsfiddle

Répondre

1
function markSelection() { 
    if(this.style.fontWeight !== "bold") { 
     this.style.fontWeight = "bold"; 
    } else { 
     this.style.fontWeight = "normal"; 
    } 
} 

for (i = 0, len = list.length; i < len; i++){ 
    list[i].onclick = markSelection; 
} 
+0

Haha. Je savais que je pouvais utiliser ceci, mais je n'arrivais pas à le faire fonctionner. Je vous remercie. Je vais m'en tenir à 'this' au lieu de' evt.target' pour le moment. – akinuri

+0

@akinuri, merci, mais alors pourquoi avez-vous accepté la réponse suggérant d'utiliser 'event.target' ...? :) – gdoron

+0

Eh bien, il était le premier à répondre et il a également lié une démo. J'ai vu le tien après avoir vu sa réponse. N'oublions pas que vous avez 46k ~: P mais mais, puisque je suis nouveau ici et nouveau pour js je ne sais pas quelle réponse est "mieux". Devrais-je le changer? o.O – akinuri

1

Vous devez utiliser le contexte de l'événement click comme celui-ci.

function markSelection(evt) { 
    var tar = evt.target; 
    if(tar.style.fontWeight !== "bold") 
     tar.style.fontWeight = "bold"; 
    else 
     tar.style.fontWeight = "normal"; 
} 

Voir violon here

+0

Merci pour la réponse. Ça marche maintenant. Je ne connais pas evt.target. Va le chercher. – akinuri

+0

Vous voulez répondre à une autre question? Sur le second élément, cliquez sur, je veux que les éléments de la liste reviennent à la normale. Je veux dire que je ne veux pas avoir deux objets en gras ou plus. Juste 1. – akinuri

+0

Mettez une boucle dans votre état qui ramènera la liste entière à la normale, puis rendra la cible plus audacieuse. – Achrome

0

Pourquoi ne pas utiliser une classe et l'activer à chaque fois que vous voulez (par exemple l'ajout sur clic, et laisser css gérer le style)

http://jsfiddle.net/blackjim/by9bP/2/

var list = document.getElementsByTagName("li"); 

function markSelection() { 

    if(this.className.indexOf('boldFruit')===-1){ 
     this.className += " boldFruit"; 
    } 
} 

for (i = 0, len = list.length; i < len; i++){ 
    list[i].onclick = markSelection; 
} 

CSS

li { 
    font-size: 20px; 
} 

li.boldFruit { 
    font-weight: bold; 
} 
+0

Code supplémentaire. Je veux basculer entre gras et normal onclick. Puis encore, merci pour la réponse. – akinuri

+0

Ce n'est pas du code supplémentaire, c'est presque pareil. Mais c'est la bonne façon, vous devriez gérer le style avec CSS si vous voulez que votre code soit maintenable. Peut-être que vous aurez besoin d'ajouter quelque chose plus tard à cette classe par exemple, alors vous verrez pourquoi c'était la bonne façon. Tu choisis. – AntouanK

+0

Je comprends votre point. En fait, je l'utilise déjà sur un autre élément. Je ne voulais simplement pas créer deux classes juste pour modifier une seule propriété. – akinuri

Questions connexes