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

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

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

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

谢谢

你想传递一个函数的引用作为callback,而不是函数执行的结果:

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

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

这应该工作:

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

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

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

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

 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事件的callback函数。

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

你想要的东西

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

使用下面的行。 当执行该行时, showDiv()将调用该函数。

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

将其更改为: $('a.test').bind("click", showDiv); (不要把showDiv放在parens上,因为你想通过函数引用)。