jQuery .click()函数自动调用

时间:2013-07-08 04:51:17

标签: javascript jquery javascript-events event-listener jquery-click-event

我使用jQuery在按钮上设置了一个事件监听器,由于某种原因,在没有单击按钮的情况下调用click监听器中的函数。我知道通常函数在侦听器中是匿名的,但它不能用作匿名函数。我调用的函数也必须接受参数,这就是为什么我认为我不能只调用函数的引用。关于我如何解决函数问题的任何想法,如果没有点击甚至注册,仍然将必要的参数传递给函数?

$('#keep-both').click(keepBothFiles(file, progress, audioSrc));

调用此函数

function keepBothFiles(file, progress, audioSrc) {
    ...
    ...
}

2 个答案:

答案 0 :(得分:11)

您正在错误地引用该功能。试试这个:

$('#keep-both').click(function(){
  keepBothFiles(file, progress, audioSrc));
});

每当您使用语法funcName()时,()都会告诉解释器立即调用该函数。 .click方法要求您传递对函数的引用。函数引用仅按名称传递。你也可以这样做:

$('#keep-both').click(keepBothFiles);

但你无法将其他论点传递给你。它默认给出一个事件对象

答案 1 :(得分:3)

您必须将函数引用传递给.click()函数,而不是调用函数的结果。当您在函数名称的末尾包含()这样的keepBothFiles(...)时,您正在告诉javascript现在执行该函数。当您只使用keepBothFiles之类的函数名称时,您将获得对该函数的引用(稍后可以调用)。

您当前正在立即调用您的函数,然后将该函数的返回值(不是函数引用)传递给.click()函数,因此它无法执行您想要的操作。

单击处理程序回调函数在jQuery中只传递了一个参数(事件),因此您无法直接调用keepBothFiles(file, progress, audioSrc)函数。

相反,它可以通过第二个包装函数来完成:

$('#keep-both').click(function(e) {
    keepBothFiles(file, progress, audioSrc);
});