проход в this
в обработчике рядный щелчка
<a href="123.com" onclick="click123(this);">link</a>
или использовать event.target
в функции (в соответствии с W3C DOM Level 2 Event model)
function click123(event)
{
var a = event.target;
}
Но, конечно, IE is different, поэтому ваниль JavaScript способ обработка это
function doSomething(e) {
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
}
или менее многословным
function doSomething(e) {
e = e || window.event;
var targ = e.target || e.srcElement;
if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug
}
где e
является event object
, который передается функции, отличных от IE браузеров.
Если вы используете jQuery, я бы настоятельно рекомендовал ненавязчивый JavaScript и использовал jQuery для привязки обработчиков событий к элементам.
thx для быстрого ответа. – Konstantinos
'if (! E) var e = window.event;' несколько избыточно - 'e' уже объявлен, зачем это делать снова? 'if' также можно избежать вообще в пользу более короткого тройного -' e = e || window.event'. То же для 'e.target' - эти 3 строки легко заменяются с помощью -' var target = e.target || е.srcElement';) – kangax
@kangax - Я бы не сказал, что 'e = e || window.event' является тернарным оператором, поскольку нет трех аргументов, кроме двух, это оператор 'logical-or/default' - http://javascript.crockford.com/survey.html. Но я считаю, что он выглядит аккуратно, и я обычно использую его. Я просто вставлял код из связанной статьи, но теперь отвечу на мой вопрос :) –