Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как определить элемент, на котором находится событие onclick (или какое-то другое) (https://javascript.ru/forum/events/10426-kak-opredelit-ehlement-na-kotorom-nakhoditsya-sobytie-onclick-ili-kakoe-drugoe.html)

uonax 04.07.2010 16:20

Как определить элемент, на котором находится событие onclick (или какое-то другое)
 
Есть такой html-код:
Код:

<div onclick="show(event)"> some text
<span>текст внутри, при клике на который тоже возникает событие</span>
</div>

В функции show() определяется элемент, на котором был сделан клик

Код:

function show(e)
{
var sourceElem = e.target || e.srcElement;
}

При клике на какой-либо тексте внутри тега <div> (если мы кликаем на текст "some text"),
то в переменную sourceElem заносится ссылка на тег <div>.

Если мы кликаем на текст внутри тега <span>, то в переменную sourceElem заносится ссылка на это тег <span>.
Как сделать, чтобы в переменную sourceElem всегда заносился элемент, на который навешано свойство onclick?

Octane 04.07.2010 16:22

<div onclick="show(event, this)">

function show(event, element) {…

uonax 04.07.2010 18:29

Цитата:

Сообщение от Octane (Сообщение 62155)
<div onclick="show(event, this)">

function show(event, element) {…

Всё гениально просто.

Кстати. А можно event поставить не на первое место, а, например, на второе? :write:

B@rmaley.e><e 04.07.2010 18:53

Можно.

Octane 04.07.2010 18:57

Конечно можно.

Это если назначать обработчик события следующим образом:
element.onclick = show;

то браузер (кроме IE, в нем нужно использовать window.event) сам первым аргументом в show отправит event, а из атрибута:
onclick="show(event, this)"

браузер создает анонимную функцию, которая уже вызывает show:
element.onclick = function (event) {  show(this, event)  };

Рекомендую прочитать: http://javascript.ru/tutorial/events

B@rmaley.e><e 04.07.2010 19:08

Цитата:

Сообщение от Octane
element.onclick = function (event) {  show(this, event)  };

Так поступают нормальные браузеры. IE же ничего никакими аргументами в обработчик события не передает. Но тут это играет на руку, т.к. переменная event - глобальная. Вот и получается, что в осле event берется из глобального неймпейса, а в нормальных браузерах - передается аргументом функции.

Если писать
element.onclick = function (event) {  show(this, event)  };
В явном виде, то будут проблемы в IE, т.к. event = undefined.


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