события и вложенные элементы
<div id="main"> <div class="qwerty"><span>qwerrtt</span><div>тут куча элементов</div> <div class="qwerty"><span>qwert</span><div>тут куча элементов</div> <div class="qwerty"><span>dfdfdfd</span><div>тут куча элементов</div> ... </div> <div> вешаю обработчик события onmouseover на div который main надо получить див, который вложен (class="qwerty") и внутри которого курсор мыши дивов много, так что вешание индивидуального обработчика на каждый-бессмысленный расход памяти |
target/srcElement
|
target указывает на непоследственного адресата события
srcElement -аналог для эксплорера |
Читайте внимательно статью, там все написано.
|
повторяю, вешать на всё свою слушалку нельзя - элементов очень много
|
<div class="qwerty"> забыли закрыть или они вложенные?
<div id="main"> <div class="qwerty"> <span>qwerrtt</span> <div>тут куча элементов</div> </div> <div class="qwerty"> <span>qwert</span> <div>тут куча элементов</div> </div> <div class="qwerty"> <span>dfdfdfd</span> <div>тут куча элементов</div> </div> </div> <script type="text/javascript"> document.getElementById("main").onclick = function (event) { event = event || window.event; var target = event.target || event.srcElement; while ((" " + target.className + " ").indexOf(" qwerty ") == -1) { if (target == this) { return; } target = target.parentNode; } target.style.backgroundColor = "#f00"; }; </script> |
кажется забыл закрыть...
спс, щас опробую |
а зачем (" " + target.className + " ")
почему нельзя просто target.className ??? и зачем нужно условие target==this ? как target может быть равен объекту, создаваемому функцией? |
Потому что у элемента может быть много CSS-классов.
<… class="someclass1 someclass2 …"> CSS-классы отделяются пробельными символа, поэтому по хорошему нужно использовать регулярное выражение, но в простейшем варианте достаточно (" " + element.className + " ").indexOf(" " + CSSClassName + " ") |
спасибо
а 2й вопрос? |
Цитата:
this — контекст вызова функции. Функции-обработчики событий вызываются в контексте DOM-элемента (исключение attachEvent в IE). Не ленитесь, читайте статьи о событиях на этом сайте. |
ясно,то есть target==this когда объектом является тот элемент,к которому приделано событие
спс |
не особо работает
по непонятной причине проходит до document, а дальше до null нашёл причину this оказался window |
Как вы назначаете обработчик события?
|
rxq.results["types"][0].parentNode.addEventListener где rxq.results["types"][0] - элемент, вложенный в "наш корневой див" в примере это <div id="main"> у меня браузер файрфокс |
Этого кода не достаточно, покажите вместе с обработчиком событий
|
разобрался, в чём проблема
ещё вопрос почему не работает rxq.results["products"][0].parentNode.addEventListener('click',function(evt){ addToList(el,txtel); evt.stopPropagation(); evt.preventDefault(); },true); действие по умолчанию всё равно срабатывает |
evt || (evt = window.event);
|
разобрался уже - в скрипте была ошибка
|
всем спасибо
|
Часовой пояс GMT +3, время: 20:50. |