Передача 'события' в функцию в качестве аргумента - PullRequest
1 голос
/ 01 февраля 2009

Я новичок как с JS, так и с jQuery, и меня немного смущает, какие ситуации потребуют от вас передать event в качестве аргумента в функцию, а какие ситуации вы бы не надо.

Например:

      $(document).ready(function() {

        $('#foo').click(function() {
         // Do something
});

      });

против

      $(document).ready(function() {

        $('#foo').click(function(event) {
         // Do something
});

      });

Ответы [ 3 ]

4 голосов
/ 01 февраля 2009

Аргумент event имеет несколько применений. Вам нужно только указать его в качестве аргумента для вашего обработчика, если вы действительно собираетесь его использовать - JavaScript обрабатывает переменные числа аргументов без жалоб.

Самое распространенное использование, которое вы увидите, это предотвращение поведения по умолчанию действия, которое вызвало событие. Итак:

$('a.fake').click(function(e) {
    e.preventDefault();
    alert("This is a fake link!");
});

... остановит любые ссылки с классом fake на фактический переход к их href при нажатии. Кроме того, вы можете отменить отправку формы с его помощью, например, в методах проверки. Это как return false, но более надежно.

Объект jQuery event на самом деле является кросс-браузерной версией стандартного аргумента event, предоставляемого во всем, кроме IE. По сути, это ярлык, который позволяет вам использовать только один путь к коду вместо того, чтобы проверять, какой браузер вы используете в каждом обработчике событий.

(Если вы читаете не-jQuery-код, вы увидите много следующего, что сделано для того, чтобы обойти недостаток IE.

function(e) {
    e = e || window.event; // For IE

Это боль, а библиотеки значительно облегчают работу.)

В документах jQuery есть полный учет его свойств. По сути, включите его, если увидите там все, что вам нужно, и не волнуйтесь иначе. Мне нравится включать его всегда, просто чтобы мне никогда не приходилось добавлять его позже, если я решу, что это все-таки нужно.

2 голосов
/ 01 февраля 2009

Событие необходимо только в том случае, если вы собираетесь использовать его в теле обработчика.

1 голос
/ 01 февраля 2009

Поскольку вы используете jQuery, вы можете указать event в качестве аргумента, только если вам нужно использовать событие в обработчике, например, если вам нужна клавиша, которая была нажата в событии keypress.

В JS, без jQuery, Prototype и т. Д. Вам нужно передать event в качестве параметра для совместимых со стандартами браузеров, таких как Firefox, но событие не передается в качестве аргумента в IE. IE фактически поддерживает глобальную переменную window.event. Поэтому в вашем обработчике (sans library) вам нужно проверить, является ли аргумент undefined; если это так, возьмите глобальную переменную.

function eventHandler(evt) {
  var theEvent = evt || window.event;
  //use the event
}

Но такая библиотека, как jQuery, позаботится об этом за вас.

Честно говоря, я не рекомендую использовать библиотеку, пока вы не выучите язык. Но если это для работы, то во что бы то ни стало используйте библиотеку, но изучите детали JS самостоятельно, чтобы вы могли лучше оценить ее.

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