Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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.click(foo())意外行为_Javascript_Jquery_Webforms_Jquery Events - Fatal编程技术网

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

Javascript jQuery.click(foo())意外行为,javascript,jquery,webforms,jquery-events,Javascript,Jquery,Webforms,Jquery Events,今天我在我的web应用程序中遇到了一个关于表单搜索提交功能(js)和jQuery中的一个按钮点击操作的错误 我有一个表单,它附带了actionsubmitEmpSearch()。这被嵌入到表单的html中,因为它是onSubmit操作。还有一个搜索按钮与带有onclick事件submitEmpSearch()的表单关联。我试图从模板中清除嵌入式javascript,以支持jQuery调用。在一个包含的jQuery调用中,我调用了$(“#搜索按钮”)。单击$(文档)中的(submitEmpSear

今天我在我的web应用程序中遇到了一个关于表单搜索提交功能(js)和jQuery中的一个按钮点击操作的错误

我有一个表单,它附带了action
submitEmpSearch()
。这被嵌入到表单的html中,因为它是
onSubmit
操作。还有一个搜索按钮与带有
onclick
事件
submitEmpSearch()
的表单关联。我试图从模板中清除嵌入式javascript,以支持jQuery调用。在一个包含的jQuery调用中,我调用了
$(“#搜索按钮”)。单击
$(文档)中的(submitEmpSearch())
。就绪

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


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

jQuery不是一种语言。这就是语言。当您要传递函数本身时,您正在传递函数的结果:

应该是:

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

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

jQuery不是一种语言。这就是语言。当您要传递函数本身时,您正在传递函数的结果:

应该是:

$('#search-button').click(submitEmpSearch)
在JavaScript中,函数可以作为值传递。但是,
submitEmpSearch()
是函数调用的返回值,这与其他语言所期望的一样。

更改为:

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

这样,您就不用执行submitEmpSearch()并将其返回值传递给click(),而是将委托传递给click()。

更改为:

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

这样,您就不用执行submitEmpSearch()并将其返回值传递给click(),而是将委托传递给click()。

试试这个

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

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

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

function handler(){
    // ...
}
jQuery('.something').click(handler()); // <- wrong
jQuery('.something').click( handler ); // <- right
函数处理程序(){
// ...
}
jQuery('.something')。单击(handler());// 啊哈

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

function handler(){
    // ...
}
jQuery('.something').click(handler()); // <- wrong
jQuery('.something').click( handler ); // <- right
函数处理程序(){
// ...
}
jQuery('.something')。单击(handler());// 而不是

$('search-button').click( submitEmpSearch() )
仅使用

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

此外,如果“搜索按钮”是一个类,则必须在其前面添加“.”(点)。如果是id,则必须添加“#”。 请参见我的示例。

而不是

$('search-button').click( submitEmpSearch() )
仅使用

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

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

只是说
jQuery不是一种语言。
用意很好,但被误导得很厉害:)@Christian,我不同意。认为jQuery是一种编程语言的人往往忽视了学习他们使用的真正语言。然后,他们会犯这样的错误。这就是为什么我说这是“善意的”,因为这种语法对其他语言也是一样的。例如,在PHP中,将函数名作为字符串传递。其他语言与jQuery(JavaScript)一样,包括C++和Delphi。这不是因为缺少JQuery知识而犯的错误。如果不使用jquery,在标准JavaScript语法中也很容易犯同样的错误。@Christian,同样的,语言是JavaScript。我同意其他语言在这方面的行为类似于JavaScript(尽管PHP最近才得到真正的闭包)@孔,我说的正好相反;这是一个错误,因为没有学习“真正的语言”,JavaScript。只是说
jQuery不是一种语言。
的用意是好的,但被误导了:)@Christian,我不同意。认为jQuery是一种编程语言的人往往忽视了学习他们使用的真正语言。然后,他们会犯这样的错误。这就是为什么我说这是“善意的”,因为这种语法对其他语言也是一样的。例如,在PHP中,将函数名作为字符串传递。其他语言与jQuery(JavaScript)一样,包括C++和Delphi。这不是因为缺少JQuery知识而犯的错误。如果不使用jquery,在标准JavaScript语法中也很容易犯同样的错误。@Christian,同样的,语言是JavaScript。我同意其他语言在这方面的行为类似于JavaScript(尽管PHP最近才得到真正的闭包)@孔,我说的正好相反;这是一个错误,因为没有学习“真正的语言”,JavaScript。没有理由额外增加间接层。它可以工作,但它并没有真正回答问题。虽然我不会投反对票。没有理由再多加一层间接。这会奏效,但它并没有真正回答问题。虽然我不会投反对票,但我发誓我在检查jQuery文档后尝试过:将引用传递给函数是有意义的,但我认为它解决不了任何问题。然而,我是结对编程,而不是坐在驾驶座上的那个。我又让人检查了一遍。啊哈,群组编程的神奇之处和应该显而易见的缺失。尝试过,修复了错误,失去了按钮功能。忘记实际将id添加到按钮。FacePalm我发誓我在检查jQuery文档后尝试过:将引用传递给函数是有意义的,但我认为它解决不了任何问题。然而,我是结对编程,而不是坐在驾驶座上的那个。我正在让人再次检查。啊哈,群编程和