为什么在页面加载时会立即触发click事件处理程序?

时间:2011-08-18 04:33:00

标签: jquery bind

我正在玩一个我想要绑定到所有链接的函数。目前,该功能在页面加载时触发,而不是在我点击链接时触发。

这是我的代码。 (如果你需要看的话,我可以发布函数showDiv()。)你能告诉我这里做错了什么或者做错了吗?

$(document).ready(function(){

    $('a.test').bind("click", showDiv());

});

谢谢!

4 个答案:

答案 0 :(得分:62)

您希望将引用作为回调传递给函数,而不是函数执行的结果:

showDiv()返回一些值;如果未使用return语句,则返回undefined

showDiv是对应该执行的函数的引用。

这应该有效:

$(document).ready(function(){
    $('a.test').bind("click", showDiv);
});

或者,您可以使用匿名函数执行更高级的功能:

...bind('click', function(){
  foo.showDiv(a,b,c);
  ...more code...
});

在某些情况下,您可能希望使用函数返回的值作为回调:

function function foo(which)
{
  function bar()
  {
    console.log('so very true');
  }
  function baz()
  {
    console.log('no way!');
  }
  return which ? bar : baz;
}

...click( foo( fizz ) );

在此示例中,foo使用fizz进行评估,并返回一个函数,该函数将被指定为click事件的回调。

答案 1 :(得分:5)

看起来你正在那里直接调用showDiv函数(并将showDiv()的返回结果绑定到click处理程序而不是直接绑定它。

你想要像

这样的东西
$(document).ready(function() { $('a.test').bind("click", showDiv); });

答案 2 :(得分:4)

使用以下行。 <{1}}会在执行该行时立即调用该函数。

showDiv()

答案 3 :(得分:3)

将其更改为:$('a.test').bind("click", showDiv);(不要将问题放在showDiv左右,因为您要传递函数参考。)