jQuery事件在doc准备好了

时间:2010-04-06 18:39:38

标签: jquery

我正在尝试在我的表单上设置按钮的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');
}

5 个答案:

答案 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