jquery .bind()和/或.ready()无效

所以我有这个代码:

var bindAll; bindAll = function () { $('#somediv').bind('mouseover', function(){do something}); }; var init; init = function () { bindAll(); ... }; $(document).ready(init()); 

它不起作用。 但是如果我通过替换将绑定放在计时器上:

 bindAll(); 

 tt = setTimeout('bindAll()', 1000); 

它突然完美无缺。 什么!??

你没有将init传递给$(document).ready ,你传递的是init返回的东西。

试试这个:

 $(document).ready(init); 

说明:

当您尝试传递该函数时,您实际上正在运行它。 在运行它时,DOM还没有准备好,因此没有发生与元素的绑定,因为它不存在。

当你执行超时时,它起作用,因为DOM完成需要不到一秒的时间,这意味着当它运行时,元素就在那里,因此它可以绑定事件。

jQuery ready需要一个处理程序,而不是一个函数调用。

 // $(document).ready(init()); <-- Not working $(document).ready(init); <-- Working! 

工作示例: http : //jsfiddle.net/marcosfromero/Qwghb/

只需将没有括号的init传递给ready函数。 它会立即在您的情况下执行,而不是在文档准备就绪:

 $(document).ready(init);