Как получить вызывающий объект onclick?
Мне нужно иметь обработчик на вызывающем объекте события onclick
т
<a href="123.com" onclick="click123(event);">link</a>
<script>
function click123(event)
{
//i need <a> so i can manipulate it with Jquery
}
</script>
Я хочу сделать это без использования $(). click или $(). live jquery, но с помощью метода, описанного выше.
Ответы
Ответ 1
передать 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 отличается, поэтому ванильный 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 для привязки обработчиков событий к элементам.
Ответ 2
Самый простой способ - передать этот в функцию click123 или
вы также можете сделать что-то вроде этого (кросс-браузер):
function click123(e){
e = e || window.event;
var src = e.target || e.srcElement;
//src element is the eventsource
}
Ответ 3
http://docs.jquery.com/Events/jQuery.Event
Попробуйте с event.target
Содержит элемент DOM, который выдает событие. Это может быть элемент который зарегистрирован для мероприятия или его ребенка.
Ответ 4
Вещь с вашим методом заключается в том, что вы загромождаете свой HTML с помощью javascript. Если вы поместите свой javascript во внешний файл, вы можете получить доступ к своему HTML ненавязчивому, и это намного опрятно.
Далее вы можете расширить свой код с помощью addEventListener/attackEvent (IE), чтобы предотвратить утечку памяти.
Это без jQuery
<a href="123.com" id="elementid">link</a>
window.onload = function () {
var el = document.getElementById('elementid');
el.onclick = function (e) {
var ev = e || window.event;
// here u can use this or el as the HTML node
}
}
Вы говорите, что хотите манипулировать им с помощью jQuery. Таким образом, вы можете использовать jQuery. Чем лучше сделать это так:
// this is the window.onload startup of your JS as in my previous example. The difference is
// that you can add multiple onload functions
$(function () {
$('a#elementid').bind('click', function (e) {
// "this" points to the <a> element
// "e" points to the event object
});
});