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

JQuery: Как получить объект события в функции обработчика события, не передавая его в качестве аргумента?

У меня есть атрибут onclick в моей ссылке:

<a href="#" onclick="myFunc(1,2,3)">click</a>

Это указывает на этот обработчик событий в JavaScript:

function myFunc(p1,p2,p3) {
    //need to refer to the current event object:
    alert(evt.type);        
}

Поскольку объект события "evt" не передается параметру, возможно ли получить этот объект?

Я пробовал window.event и $(window.event), но оба они undefined.

Любая идея?

4b9b3361

Ответ 1

Поскольку объект события "evt" не передается из параметра, возможно ли получить этот объект?

Нет, не надежно. IE и некоторые другие браузеры делают его доступным как window.event (not $(window.event)), но многие браузеры этого не делают.

Вам лучше передать объект события в функцию:

<a href="#" onclick="myFunc(event, 1,2,3)">click</a>

Это работает даже в браузерах, отличных от IE, потому что они выполняют код в контексте, который имеет переменную event (и работает в IE, потому что event разрешает window.event). Я пробовал это в IE6 +, Firefox, Chrome, Safari и Opera. Пример: http://jsbin.com/iwifu4

Но ваша ставка best, безусловно, должна правильно подключить событие:

HTML:

<a href="#">click</a>

JavaScript с помощью jQuery (поскольку вы используете jQuery):

$("selector_for_the_anchor").click(function(event) {
    // Call `myFunc`
    myFunc(1, 2, 3);

    // Use `event` here at the event handler level, for instance
    event.stopPropagation();
});

... или если вы действительно хотите передать event в myFunc:

$("selector_for_the_anchor").click(function(event) {
    myFunc(event, 1, 2, 3);
});

Селектор может быть любым, что идентифицирует якорь. У вас есть очень богатый набор на выбор (почти все CSS3, а также некоторые). Вы можете добавить привязку id или class, но опять же, у вас есть другие варианты. Если вы можете использовать то, что находится в документе, а не добавлять что-то искусственное, отлично.

Ответ 2

в IE вы можете получить объект события window.event в других браузерах без директивы 'use strict' можно получить arguments.callee.caller.arguments[0].

function myFunc(p1, p2, p3) {
    var evt = window.event || arguments.callee.caller.arguments[0];
}

Ответ 3

Напишите объявление своего обработчика событий следующим образом:

<a href="#" onclick="myFunc(event,1,2,3)">click</a>

Затем ваша функция "myFunc()" может получить доступ к событию.

Строковое значение атрибута "onclick" преобразуется в функцию таким образом, который почти точно совпадает с браузером (внутренне), вызывающим конструктор Function:

theAnchor.onclick = new Function("event", theOnclickString);

(кроме IE). Однако, поскольку "событие" является глобальным в IE (это атрибут окна), вы сможете передать его функции таким образом в любом браузере.

Ответ 4

Если вы вызываете обработчик событий по разметке, как вы сейчас делаете, вы не можете (x-браузер). Но если вы связываете событие click с jquery, это возможно следующим образом:

Разметка:

  <a href="#" id="link1" >click</a>

JavaScript:

  $(document).ready(function(){
      $("#link1").click(clickWithEvent);  //Bind the click event to the link
  });
  function clickWithEvent(evt){
     myFunc('p1', 'p2', 'p3');
     function myFunc(p1,p2,p3){  //Defined as local function, but has access to evt
        alert(evt.type);        
     }
  }

Так как событие ob