2009-02-01 4 views
1

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

Например:

 $(document).ready(function() { 

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

     }); 

против

 $(document).ready(function() { 

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

     }); 

ответ

4

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

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

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

... остановятся все ссылки с классом fake от фактически собирается их href при нажатии. Аналогичным образом, вы можете отменить форму представления с ним, например. в методах валидации. Это return false, но более надежным.

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

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

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

Это боль, и библиотеки, сделать это гораздо проще делайте ставку.)

There's a full accounting of its properties in the jQuery docs. По существу, включите его, если увидите что-нибудь, что вам там нужно, и не беспокойтесь иначе. Мне нравится включать его всегда, так что мне никогда не придется забывать добавлять его позже, если я решит, что это необходимо в конце концов.

2

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

+0

Каков пример того, как я буду использовать событие в обработчике? – Matthew

+0

Если вы хотите что-то сделать в обработчике, который требует знать больше информации о событии, например, о местоположении мыши. Вы можете получить некоторые идеи, если поместите контрольную точку внутри обработчика и посмотрите, что доступно в объекте события. – Nosredna

1

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

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

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

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

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

+0

На самом деле я предпочитаю совсем наоборот. Сначала изучите библиотеку, которая позволяет избежать небольших причуд языка (в случае JS, проблемы с кросс-браузером). Со временем, познакомившись с подмножеством используемого вами языка, поэкспериментируйте с работой, свободной от библиотеки. – David

+0

Личные предпочтения Я думаю. Но я думаю, что мне стало намного легче справляться с причудами языка. – geowa4

Смежные вопросы