Обработчик событий
Каким образом можно на нативном JS сделать выборку элементов (например document.getElementsByTagName('a')) и повесить каждому элементу отобранного массива обработчик? В JQuery понятно, можно сразу вешать допустим click (например $('a').click(function () { $(this)... };) и внутри к текущему элементу обращаться как $(this). Как это сделать на нативном JS? ведь document.getElementsByTagName('a').addEventListene r('click', function () {}, false); не работает.
|
да, а
document.getElementsByTagName('a')[0].addEventListener('click', function () {}, false); сработает |
serhioses,
циклом по всем элементам способом EmperioAf, |
Не понимаю... допустим есть список:
<ul> <li><a data-id="1"></a></li> <li><a data-id="2"></a></li> <li><a data-id="3"></a></li> <li><a data-id="4"></a></li> </ul> Как мне навесить click на каждую ссылку? JQuery: $('a').click(function () { var id = $(this).data('id') }); Как это сделать на JS? |
Цитата:
Цитата:
|
serhioses,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> a:after{ content: attr(data-id); } </style> </head> <body> <ul> <li><a data-id="1"></a></li> <li><a data-id="2"></a></li> <li><a data-id="3"></a></li> <li><a data-id="4"></a></li> </ul> <script> var a = document.getElementsByTagName('a'), fn = function() { alert(this.dataset.id) },i=0, el; for ( ; el = a[i++]; ) el.addEventListener('click', fn, false); </script> </body> </html> |
Спасибо большое!!!!!!!!! Я так тупил... У меня был следующий код для теста:
for (var i = 0; i < a.length; i++) { a[i].addEventListener('click', (function (i){ console.log(i); }(i)), false); } Естественно он сразу же и срабатывал. И я сидел думал ну как еще можно повесить событие на элемент. А потом с помощью вашего решения понял что мне просто внутри нужно вернуть функцию и все будет работать! for (var i = 0; i < a.length; i++) { a[i].addEventListener('click', (function (i){ return function () { console.log(i); } }(i)), false); } Спасибо! |
Часовой пояс GMT +3, время: 15:16. |