Подтвердить что ты не робот

Как получить вызывающий объект 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, но с помощью метода, описанного выше.

4b9b3361

Ответ 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
  });
});