Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Clicked <li> from <ul onclick>

Tags:

As a relative beginner with JS, I am struggling to try and find a solution to this.

I need to find out which line of an unordered list was clicked

<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> 

I don't really want to add a onclick event to each individual line, I'm sure there must be a way ??

like image 809
crankshaft Avatar asked Feb 25 '11 11:02

crankshaft


2 Answers

You can use event.target for this:

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> 

Example: http://jsfiddle.net/ArondeParon/2dEFg/5/

Please note that this is a very basic example and you will likely encounter some problems when you delegate events to elements containing more than one level. When this happens, you will have to traverse the DOM tree upwards to find the containing element.

like image 123
Aron Rotteveel Avatar answered Sep 28 '22 03:09

Aron Rotteveel


The object which was actually clicked is

event.target 

inside the onclick callback. What you are trying to do is a good idea, and it is known as event delegation.

http://jsfiddle.net/VhfEh/

like image 20
Andrea Avatar answered Sep 28 '22 03:09

Andrea