参数在哪里来自jQuery事件的匿名函数?

时间:2013-08-04 18:57:03

标签: jquery

当我开始学习jQuery时,我不知道它是一个JavaScript框架,一般来说,我对JavaScript一无所知。现在我正在尝试学习如何在JavaScript方面运行jQuery,但我无法理解jQuery语法的一部分。

$('#element').keypress(function(z) {

})

在之前的jQuery事件中有一个匿名函数 - 我认为它是一个匿名函数。如果我错了请纠正我。在这个函数中有一个参数'z',我们可以在这个事件中使用它来知道用.which属性按下了哪个键。所以我的问题是:

该功能的参数是什么?为什么这个参数与.keypress事件有关系?

5 个答案:

答案 0 :(得分:1)

匿名函数可以处理的唯一参数是DOM传入的事件。您所谓的参数是任意的,eevt是两个常用的值。

在您的匿名函数中,您可以使用z来访问keypress对象的任何可用属性和方法。

一些例子包括但不限于:

$('#element').keypress(function(z){
  var key = z.which; //the specific key that was pressed
  var target = z.target; //what HTML element is the target of the event?
  var posx = z.pageX; //the mouse X position when the key was pressed
  var posy = z.pageY; //the mouse Y position when the key was pressed
}

答案 1 :(得分:0)

简短的回答是,作为事件处理程序传递的函数是由jQuery在内部调用的,因此库(或编写它的人)必须选择他们想要调用函数的方式。

通过指定合同(即宣布事件处理程序将获得表示“事件对象”的单个参数)然后在自己的库中遵循该合同,这允许像您这样的开发人员利用您的合同通过期望将事件对象作为回调的第一个参数传入来进行回调。在.keypress()的情况下,jQuery使用其事件对象作为第一个参数调用您指定的处理程序。

答案 2 :(得分:0)

From the docs

.keypress( handler(eventObject) )

这意味着keypress()接受处理程序[即function]将eventObject作为参数传递。

jQuery将负责检测何时触发keypress事件,然后执行您的处理程序[匿名或正确定义],例如:

var myHandler = function(event){...}

$(document).keypress(myHandler);

答案 3 :(得分:0)

如果您查看http://api.jquery.com/keypress/处的文档,您会看到您使用的keypress方法的签名是:

.keypress( handler(eventObject) )

下面说明处理程序是一个函数。语法告诉您该函数采用单个参数eventObjecthttp://api.jquery.com/category/events/event-object/提供了此对象的更多详细信息。

答案 4 :(得分:0)

为了便于阅读,该参数通常以eevent传递。这是jQuery规范化event object,保证传递给任何处理程序(读取链接的文档)。

因此,例如,当用户点击“Enter”时执行某些操作:

$('#element').keypress(function (z) {

    // e.which is a normalized e.keyCode / e.charCode
    // see http://api.jquery.com/event.which/ 
    if (z.which === 13) {
        console.log("zomg why is the event passed as z?");
    }
});