【问题标题】:jQuery .click() function called automaticallyjQuery .click() 函数自动调用
【发布时间】:2013-07-08 04:51:17
【问题描述】:

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

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

调用这个函数

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

【问题讨论】:

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


【解决方案1】:

您错误地引用了该函数。试试这个:

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

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

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

但是您不能将其他参数传递给它。默认情况下给它一个事件对象

【讨论】:

    【解决方案2】:

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

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

    单击处理程序回调函数在 jQuery 中只传递一个参数(事件),因此您不能让它像您拥有的那样直接调用您的 keepBothFiles(file, progress, audioSrc) 函数。

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

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

    【讨论】:

    • 如果我也需要的话,我也会将 e 传递给 keepBothFiles 函数吗?
    • @IlanBiala - 是的,如果e 与函数相关,您也可以将其传入。
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多