我正在尝试在我的表单上设置按钮的click事件,由于某种原因我得到了奇怪的行为。当我将click事件绑定到不带参数的函数时,事情似乎工作正常。但是当我使用带参数的函数绑定事件时,事件会在文档准备就绪和单击时触发。有什么想法吗?
示例1:
这会导致警报框在准备就绪和单击按钮时触发。
jQuery(document).ready(function(){
$('myButton').click(alert('foo'));
});
示例2:
这会导致警告框在单击按钮时触发仅。
jQuery(document).ready(function(){
$('myButton').click(wrapper);
});
// External js file
function wrapper(){
alert('bar');
}
答案 0 :(得分:7)
你需要anonymous function (read this for more complete explanation),如下所示:
jQuery(function() {
$('myButton').click(function() {
alert('foo');
});
});
click处理程序接受一个函数,该函数内部发生的事情取决于你,但它不能传递事件... javascript只是不能这样工作。当您将代码包装在匿名函数中时,无论内部的函数或参数如何,都会执行整个操作。
答案 1 :(得分:1)
$('myButton').click(alert('foo'));
调用alert('foo')
(弹出警报),然后将click事件绑定到alert
的返回值(不同样的事情作为警报)。你可能想要使用匿名函数,就像尼克建议的那样。
答案 2 :(得分:0)
jQuery(document).ready(function(){
$('myButton').click(function(){
wrapper();
});
});
答案 3 :(得分:0)
这是一个经典的错误。你正在做的是实际在click事件监听器中给出返回值,而不是javascript函数对象。
如果你坚持使用upper方法,你将不得不使用eval(最好不要使用)
您的较低方法有效,匿名函数也可以使用。
答案 4 :(得分:0)
Wrapper是一个函数,而Alert是Window对象的一种方法......
HTH