1

完成以下任务的正确方法是什么:

$("#btn").click(function1);

调用函数:

function function1 (event) {
    event.preventDefault();
}

这似乎可行,但是我不明白 function1 如何在没有传入事件参数的情况下理解它所指的内容。这样设置的侦听器是否更有意义:

$("#btn").click(function1(event));

这是一个小提琴

4

4 回答 4

7

jQuery 中的.click()函数,除了作为第一个参数的函数。在 Javascript 中,函数是值,以及原始值或对象。函数是一等公民

如果function1(event)作为参数使用,函数会被执行,因为这是函数名后面括号的语义。所以.click()jQuery 函数会收到函数的输出,这不是预期的类型。

将函数名作为参数传递意味着您传递的是函数(实际上是对函数的引用),而不是函数调用的结果。当点击事件被触发时,该函数将被调用。这种情况下的函数称为“回调”。

回调在 Javascript 中非常重要,因为事件驱动的行为是使用客户端脚本的主要原因。

回调系统背后的概念是

//the click function
function doSomething(callback){
//in your case the event is the argument that jQuery will prepare for you
var argument = produceTheArgument();
//doSomething is in charge to invoke the function, passing the argument
callback(argument);
}

//your function
function myCallback(argument){
 //your function will consume the argument
}

//my callback is passed as a reference, not invoked
doSomething(myCallback);
于 2013-09-18T18:36:18.003 回答
1

在您的第一个示例function1中,知道event变量是,因为 JavaScript(以及随后的 jQuery)将事件信息作为参数传递。

这是 JavaScript 的本质,而不仅仅是 jQuery。考虑以下:

document.getElementById('btn').addEventListener('click', function1, false);

function function1(e)
{
    console.log(e);
}

JavaScript会在被点击function1时自动调用#btn,它会自动添加事件信息作为第一个参数。jQuery 也简单地将这些信息传递给它自己的方法,以便您可以访问它。

于 2013-09-18T18:38:38.263 回答
1

您正在订阅事件并在点击侦听器中传递对函数的引用 - jQuery 事件处理器只会在 jQuery 的上下文中调用您的函数并将所有参数传递给它。

于 2013-09-18T18:29:17.090 回答
0

根据 jQuery 的文档:

当鼠标指针悬停在元素上时,click 事件被发送到元素,并且鼠标按钮被按下和释放。任何 HTML 元素都可以接收此事件。

参考:http ://api.jquery.com/click/

于 2013-09-18T18:35:13.143 回答