将'event'作为参数传递给函数

时间:2009-02-01 05:26:58

标签: javascript jquery

我是JS和jQuery的新手,我对于什么情况需要你将event作为参数传递给函数有点困惑,以及你不会的情况需要。

例如:

      $(document).ready(function() {

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

      });

      $(document).ready(function() {

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

      });

3 个答案:

答案 0 :(得分:4)

event参数有一些用处。如果你真的要使用它,你只需要将它指定为你的处理程序的参数 - JavaScript处理可变数量的参数而不会抱怨。

您将看到的最常见用途是防止触发事件的操作的默认行为。所以:

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

...会阻止与fake班级的任何链接在点击时实际转到他们的href。同样,您可以使用它取消表单提交,例如在验证方法中。这喜欢 return false,但更可靠。

jQuery的event对象实际上是除IE之外的所有内容中提供的标准event参数的跨浏览器版本。它本质上是一个快捷方式,它允许您只使用一个代码路径,而不必检查您在每个事件处理程序中使用的浏览器。

(如果你阅读非jQuery代码,你会看到很多以下内容,这是为了解决IE的不足。

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

这很痛苦,图书馆让它更容易处理。)

There's a full accounting of its properties in the jQuery docs.基本上,如果你在那里看到任何你需要的东西,请加入它,不要担心。我总是喜欢把它包括在内,所以如果我认为毕竟需要它,我就不必记得在以后添加它。

答案 1 :(得分:2)

如果你要在处理程序的主体中使用它,你只需要该事件。

答案 2 :(得分:1)

由于您使用的是jQuery,因此如果您需要在处理程序中使用该事件,则只需将event作为参数,例如,如果您需要在keypress事件上按下的键。

在JS中,如果没有jQuery或Prototype等,您需要将event作为标准兼容浏览器(如Firefox)的参数传递,但该事件不会作为IE中的参数传递。 IE实际上维护着一个全局变量window.event。所以在你的处理程序(sans库)中,你需要检查参数是否为undefined;如果是这样,抓住全局变量。

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

但像jQuery这样的库会为你解决这个问题。

老实说,在你学会了这门语言之前,我不建议你使用图书馆。但如果这是一份工作,那么一定要使用图书馆,但要自己学习JS的细节,这样你就可以更好地欣赏它了。