2010-04-06 81 views
0

我想设置我的窗体上的按钮的单击事件,出于某种原因,我越来越奇怪的行为。当我将click事件绑定到一个不带参数的函数时,事情似乎很好。但是当我将事件绑定到一个带有参数的函数时,事件就会在文档准备好并单击时触发。有任何想法吗?jQuery事件触发文档就绪

例1:

这将导致一个警告对话框开火准备,并单击按钮时。

jQuery(document).ready(function(){ 
    $('myButton').click(alert('foo')); 
}); 

例2:

这将导致一个警告框,火ONLY按钮被按下时。

jQuery(document).ready(function(){ 
    $('myButton').click(wrapper); 
}); 

// External js file 
function wrapper(){ 
    alert('bar'); 
} 
+0

高雅的downvote非常有意义。 – Gabe 2013-05-20 20:25:50

回答

6

你需要一个anonymous function (read this for more complete explanation),像这样:

jQuery(function() { 
    $('myButton').click(function() { 
    alert('foo'); 
    }); 
}); 

单击处理需要一个功能,会发生什么内部的功能是你的,但它不能通过事件... JavaScript的只是没有按这样工作。当你用匿名函数包装你的代码时,整个事情都会执行,而不管内部的函数或参数。

1

$('myButton').click(alert('foo'));调用alert('foo')(弹出一个警告),然后结合的Click事件到alert返回值(这是一回事警报)。你可能会想使用匿名函数,就像Nick所建议的那样。

0
jQuery(document).ready(function(){ 
    $('myButton').click(function(){ 
     wrapper(); 
    }); 
}); 
0

这是一个古典错误。你所做的实际上是在click事件监听器中给出返回值,而不是javascript函数对象。

如果你坚持使用上的方法,你就必须使用eval(这是最好不要使用)

你的下方法工作,和匿名函数工作了。

0

包装是一种功能,而警报是Window对象的一个​​方法...

HTH