En tant que débutant relatif avec JS, j'ai du mal à essayer de trouver une solution à cela.
J'ai besoin de savoir quelle ligne d'une liste non ordonnée a été cliquée
<ul onclick="alert(this.clicked.line.id);"> <li id=l1>Line 1</li> <li id=l2>Line 2</li> <li id=l3>Line 3</li> </ul>
Je ne veux vraiment pas ajouter un événement onclick à chaque ligne individuelle, je suis sûr qu'il doit y avoir un moyen ??
Vous pouvez utiliser event.target
pour ceci:
JS:
// IE does not know about the target attribute. It looks for srcElement // This function will get the event target in a browser-compatible way function getEventTarget(e) { e = e || window.event; return e.target || e.srcElement; } var ul = document.getElementById('test'); ul.onclick = function(event) { var target = getEventTarget(event); alert(target.innerHTML); };
HTML:
<ul id="test"> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul>
Exemple: http://jsfiddle.net/ArondeParon/2dEFg/5/
Notez qu'il s'agit d'un exemple très simple et que vous rencontrerez probablement des problèmes lors de déléguer des événements à des éléments contenant plus d'un niveau. Lorsque cela se produit, vous devrez traverser l'arbre DOM vers le haut pour trouver l'élément contenant.
L'objet qui a effectivement été cliqué est
event.target
À l'intérieur du rappel de l' onclick
. Ce que vous essayez de faire, c'est une bonne idée, et il s'agit d'une délégation d'événement .
Vous pouvez utiliser event.target pour ceci:
Je ne semblais pas fonctionner, donc j'ai fait un petit changement semble fonctionner maintenant.
var ul = document.getElementById('test'); ul.onclick = function(event) { var target = event.target; alert(event.target.innerHTML); };
// Le moyen le plus simple de le faire pourrait être d'ajouter un paramètre de requête à vos liens:
<ul> <li><a href="Line 1">Line 1</a></li> <li><a href="Line 2">Line 2</a></li> <li><a href="Line 3">Line 3</a></li> </ul>