Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中将函数引用作为事件处理程序传递_Javascript_Jquery - Fatal编程技术网

Javascript 在jQuery中将函数引用作为事件处理程序传递

Javascript 在jQuery中将函数引用作为事件处理程序传递,javascript,jquery,Javascript,Jquery,我试图在jQuery中将函数引用作为事件处理程序传递。我想用一个简单的例子,如下面 $("a").click(console.debug.bind(undefined,this)); …而不是显式传递整个函数体: $("a").click(function() { console.debug(this) }); 此外,我希望在我的速记函数中访问jQuery选择的元素(并将它们作为参数传递)。换句话说:我希望有一个$(“a”)的结果作为此(或任何其他将检索结果的代码) 到目前为止

我试图在jQuery中将函数引用作为事件处理程序传递。我想用一个简单的例子,如下面

$("a").click(console.debug.bind(undefined,this));
…而不是显式传递整个函数体:

 $("a").click(function() {
     console.debug(this)
 });
此外,我希望在我的速记函数中访问jQuery选择的元素(并将它们作为参数传递)。换句话说:我希望有一个
$(“a”)
的结果作为
(或任何其他将检索结果的代码)

到目前为止,我已经尝试:

var a = function() {
    console.debug(this);
};

var b = console.debug.bind(undefined,this); 

$("a").click(function() {console.debug(this)}); // prints link
$("a").click(a); // prints link 
b(); // prints Window
$("a").click(console.debug.bind(undefined,this)); // prints Window & jQuery.Event
这是小提琴:

我的问题是:

  • 是否有可能使用这种结构并满足所有要求,而不定义额外的变量-如上所示的一行
  • 是否可以使用所描述的方法访问jQuery的选择结果
  • 为什么在给定的范围
    中,此
    成为“合并”窗口和jQuery.Event对象
  • 的第一个参数是用于此的新上下文。通过传递
    undefined
    基本上没有传递第一个参数

    第二个参数和其他参数作为第一个值传递到函数中

    还请注意,
    在全局范围内时,指的是
    窗口
    对象

    所以这里,
    b

    console.debug.bind(undefined,this);
    
    与…相同

    function(){ console.debug(window); }
    
    …因为您正在将
    (即
    窗口
    )作为第一个参数传递给
    调试

    默认情况下,将事件附加到元素时,
    将自动指向捕获事件的元素,因此甚至不需要绑定,这就是为什么
    $(“a”)。单击(a)在不使用绑定的情况下工作。

    的第一个参数是用于此
    的新上下文。通过传递
    undefined
    基本上没有传递第一个参数

    第二个参数和其他参数作为第一个值传递到函数中

    还请注意,
    在全局范围内时,指的是
    窗口
    对象

    所以这里,
    b

    console.debug.bind(undefined,this);
    
    与…相同

    function(){ console.debug(window); }
    
    …因为您正在将
    (即
    窗口
    )作为第一个参数传递给
    调试

    默认情况下,将事件附加到元素时,
    将自动指向捕获事件的元素,因此甚至不需要绑定,这就是为什么
    $(“a”)。单击(a)在不使用绑定的情况下工作。

    • 你已经在用它了,不是吗?:)这是有限的,但它在你自己的小提琴作品

    • jQuery将把事件对象传递给指定的函数。您可以使用函数bind将其作为参数传递(您已经有了这个功能)

    • 没有。看看发生了什么:

    单击处理程序函数-事件对象。您将
    console.debug.bind(未定义,this)
    作为处理函数传递,因此jQuery将使用一个参数调用它

    然后,当您在函数中绑定为“this”对象并发送一个额外的参数-“this”时,这是此范围内的一个窗口,因为您是在最高级别绑定的

    因此,当实际单击发生时,jQuery使用两个参数调用console.debug—在click()期间绑定的窗口对象和始终传递给click处理程序的jQuery事件。可以接受和显示多个对象,这正是您在开发者控制台中看到的。

    • 你已经在用它了,不是吗?:)这是有限的,但它在你自己的小提琴作品

    • jQuery将把事件对象传递给指定的函数。您可以使用函数bind将其作为参数传递(您已经有了这个功能)

    • 没有。看看发生了什么:

    单击处理程序函数-事件对象。您将
    console.debug.bind(未定义,this)
    作为处理函数传递,因此jQuery将使用一个参数调用它

    然后,当您在函数中绑定为“this”对象并发送一个额外的参数-“this”时,这是此范围内的一个窗口,因为您是在最高级别绑定的


    因此,当实际单击发生时,jQuery使用两个参数调用console.debug—在click()期间绑定的窗口对象和始终传递给click处理程序的jQuery事件。可以接受和显示多个对象,这正是您在开发人员控制台中看到的。

    传递未定义的对象与不传递的对象相同。它没有像这样使用未定义。另外,它只是将窗口传递给debug方法,
    this
    不会传递给debug。当然,“this”是传递的-这就是他在控制台中接收两个对象的原因。关于undefined的注释只是语言上的一句空话:)由于函数没有“this”,它肯定会觉得它实际上使用了“undefined”作为“this”:)传递undefined与不传递是一样的。它没有像这样使用未定义。另外,它只是将窗口传递给debug方法,
    this
    不会传递给debug。当然,“this”是传递的-这就是他在控制台中接收两个对象的原因。关于undefined的注释只是一个语言上的abracadabra:)因为函数没有“this”,它肯定会感觉它实际上使用了“undefined”作为“this”:)