jQuery .click(foo())意外行为

时间:2011-04-01 01:11:13

标签: javascript jquery javascript-events webforms

今天我在网页应用中发现了一个关于表单搜索提交功能(在js中)和jQuery中的按钮单击操作的错误。

我有一个附加了动作submitEmpSearch()的表单。它嵌入在表单的html中,因为它是onSubmit动作。还有一个与表单相关联的搜索按钮,其中包含onclick个事件submitEmpSearch()。我试图从模板中清除嵌入式javascript,转而支持jQuery调用。在一个包含的jQuery调用中,我在$('#search-button').click( submitEmpSearch() )组内部调用了$(document).ready

根据我之前使用.click()函数的经验,我希望它具有与提供的嵌入式onclick属性相同的功能。然而,相反,它给页面一个无限循环(显然)加载后立即点击按钮!

现在,我以前总是传递function() {}模式。我之前从未传过预定义的函数。这是jQuery 语言框架中的某种问题吗?或者还有别的我做错了吗?

5 个答案:

答案 0 :(得分:4)

jQuery不是一种语言。 JavaScript是语言。当你想传递函数时,你正在传递函数的结果

应该是:

$('#search-button').click(submitEmpSearch)

在JavaScript中,函数可以作为值传递。但是,submitEmpSearch()是函数调用的返回值,正如人们对其他语言的期望一样。

答案 1 :(得分:3)

而不是

$('search-button').click( submitEmpSearch() )

仅使用

$('#search-button').click( submitEmpSearch )

$('#search-button').click( function(){submitEmpSearch();} )

此外,如果“搜索按钮”是一个类,则必须添加“。” (点)之前。如果是id,则必须添加“#”。 看看我的例子。

答案 2 :(得分:1)

啊哈!

您应该通过引用传递函数,而不是调用函数并传递其结果:

function handler(){
    // ...
}
jQuery('.something').click(handler()); // <- wrong
jQuery('.something').click( handler ); // <- right

答案 3 :(得分:0)

更改自:

$('search-button').click(submitEmpSearch())

到:

$('search-button').click(submitEmpSearch)

这样代替执行submitEmpSearch()并将其返回值传递给click(),您将委托传递给click()。

答案 4 :(得分:0)

试试这个。

$('#search-button').click(function(){
    submitEmpSearch();
});