Первый параметр в обработчик событий - PullRequest
1 голос
/ 10 марта 2010

Если у меня есть встроенные обработчики событий с моей разметкой (не рекомендуется, я знаю), например

 span id="..." onclick="foo(p1,p2,p3)"

как я могу получить доступ к объекту "событие" в функции обработчика событий foo? Изменение вышеупомянутого на

 span id="..." onclick="foo(event,p1,p2,p3)"

и затем использовать его в "foo", как

function foo(e,p1,p2,p3)
{
   if (!e) e = window.event;
}

, кажется, работает, но я нигде не вижу, чтобы это было задокументировано, поэтому я опасаюсь его использовать. Другими словами, первый параметр для встроенного обработчика событий всегда событие объект , если он назван таковым в onclick = ... разметка? Это кросс-браузер, чтобы его можно было безопасно использовать? И если он не назван как таковой (как в моем первом примере), параметры обрабатываются как обычные параметры, и объект события не передается?

Мысли? Спасибо

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Вы неправильно понимаете свой код.

Строка, которую вы помещаете во встроенный обработчик, является обычным фрагментом кода Javascript. Это не должен быть единственный вызов функции; даже может содержать несколько операторов (как обычно, разделенных точкой с запятой)

Код встроенного обработчика получит переменную с именем event, которая ссылается на объект события.

Когда вы пишете onclick="foo(event,p1,p2,p3)", вы делаете обычный вызов функции и передаете в функцию значения четырех переменных с именами event, p1, p2 и p3 в качестве параметров.

0 голосов
/ 11 марта 2010

Итак, я провел несколько тестов в Firefox (3.5.8 / linux) и вот что я придумала. Я не знал об использовании события, как в примере 2, но в Firefox оно работает правильно. Однако это НЕ тот случай, когда первая переменная, переданная функции, всегда является событием. «событие», кажется, зарегистрировано в каком-то глобальном объекте, но я не могу определить, какой именно. (Это не документ или окно: P)

Строка кода, которая есть в функции foo

if (!e) e = window.event;

- это в основном то, как вы должны перехватывать события в Internet Explorer, так что он наверняка будет работать в IE и Firefox. И да, поэтому, если вы не передаете переменную с именем 'event', как во втором примере, параметры будут обрабатываться как обычные параметры, и объект события не будет передан.

0 голосов
/ 10 марта 2010

Взгляните здесь . Это похоже на ваш пример. Тем не менее, есть некоторые упоминания о том, что это не работает так же, как в IE, поэтому вы должны проверить, определен ли первый аргумент (объект события), и если нет, использовать window.event.

Другая ссылка здесь . Я часто нахожу MDC полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...