Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   события и вложенные элементы (https://javascript.ru/forum/events/10389-sobytiya-i-vlozhennye-ehlementy.html)

KOLANICH 02.07.2010 00:19

события и вложенные элементы
 
<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") и внутри которого курсор мыши
дивов много, так что вешание индивидуального обработчика на каждый-бессмысленный расход памяти

exec 02.07.2010 13:41

target/srcElement

KOLANICH 02.07.2010 20:56

target указывает на непоследственного адресата события
srcElement -аналог для эксплорера

Octane 03.07.2010 00:04

Читайте внимательно статью, там все написано.

KOLANICH 03.07.2010 00:29

повторяю, вешать на всё свою слушалку нельзя - элементов очень много

Octane 03.07.2010 01:00

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

KOLANICH 04.07.2010 20:32

кажется забыл закрыть...
спс, щас опробую

KOLANICH 04.07.2010 21:14

а зачем (" " + target.className + " ")
почему нельзя просто target.className ???

и зачем нужно условие target==this ?
как target может быть равен объекту, создаваемому функцией?

Octane 04.07.2010 21:18

Потому что у элемента может быть много CSS-классов.
<… class="someclass1 someclass2 …">

CSS-классы отделяются пробельными символа, поэтому по хорошему нужно использовать регулярное выражение, но в простейшем варианте достаточно
(" " + element.className + " ").indexOf(" " + CSSClassName + " ")

KOLANICH 04.07.2010 21:35

спасибо
а 2й вопрос?


Часовой пояс GMT +3, время: 04:32.