Подтвердить что ты не робот

Получить элемент li onclick с чистым javascript без применения onClick к каждому элементу

Прежде всего, я не хочу использовать jQuery, просто чистый javascript; пожалуйста, не ссылайтесь на дубликаты сообщений jQuery.

Если у меня есть список, например

<ul id="bulk">
    <li id="one"></li>
    <li id="bmw"></li>
</ul>

Я хочу получить идентификатор элемента с щелчком. Я знаю, что я мог бы добавить onClick = "" к каждому элементу, но у моего производственного списка есть 2000 записей, и я думаю, что лучший способ существует.

Например:

Если у меня был только один элемент li с id='singular', я мог бы использовать следующий javascript, чтобы получить идентификатор, нажав.

var li = document.getElementById('singular').onclick = function() { do something };

Поскольку есть тысячи элементов li, этот код не будет работать.

Мне удалось получить список имен элементов со следующим javascript:

var bulk = document.getElementById('bulk');
var bulkli = tabs.getElementsByTagName('li');
//bulkli contains ["one", "bmw"];

но это не говорит мне, какой из них был нажат.

4b9b3361

Ответ 1

Вы можете добавить прослушиватель событий к родительскому ul, а затем использовать e.target.id, чтобы получить id элемента с щелчком. Просто убедитесь, что элемент clicked на самом деле является li, так как вы можете не нажимать на него.

Пример здесь

var ul = document.getElementById('bulk');  // Parent

ul.addEventListener('click', function(e) {
    if (e.target.tagName === 'LI'){
      alert(e.target.id);  // Check if the element is a LI
    }
});

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

Пример здесь

var ul = document.getElementById('bulk'); // Parent

ul.addEventListener('click', function (e) {
    var target = e.target; // Clicked element
    while (target && target.parentNode !== ul) {
        target = target.parentNode; // If the clicked element isn't a direct child
        if(!target) { return; } // If element doesn't exist
    }
    if (target.tagName === 'LI'){
        alert(target.id); // Check if the element is a LI
    }
});

Ответ 2

Вы можете использовать это:

var link = document.getElementById("bulk");
attachEvent(link, "click", EventHandler);

function attachEvent(element, type, handler) {
    if (element.addEventListener) element.addEventListener(type, handler, false);
    else element.attachEvent("on"+type, handler);
}

function EventHandler(e) {
    console.log(e.target.id);
}

скрипка

Эта работа, если li имеет дочерние элементы:

пример скрипта с детьми

Ответ 3

передать свой id в качестве параметра в функцию onclick.

this.getAttribute('id')