Get Clicked <li> из <ul onclick>

Как относительный новичок с JS, я изо всех сил пытаюсь найти решение этого.

Мне нужно выяснить, какая строка неупорядоченного списка была нажата

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

Я действительно не хочу добавлять событие onclick для каждой отдельной строки, я уверен, что должен быть способ

Ответы

Ответ 1

Вы можете использовать event.target для этого:

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>

Пример: http://jsfiddle.net/ArondeParon/2dEFg/5/

Обратите внимание, что это очень простой пример, и вы, вероятно, столкнетесь с некоторыми проблемами при делегировании событий элементам, содержащим более одного уровня. Когда это произойдет, вам нужно будет пройти дерево DOM вверх, чтобы найти содержащий элемент.

Ответ 3

Вы можете использовать event.target для этого:

Кажется, что не работает, поэтому я сделал небольшие изменения, похоже, сейчас работает.

var ul = document.getElementById('test');
ul.onclick = function(event) {
    var target = event.target;
    alert(event.target.innerHTML);
};  

Ответ 4

//Самый простой способ сделать это - добавить параметр запроса к вашим ссылкам:

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