所以我有这段代码:
var bindAll;
bindAll = function ()
{
$('#somediv').bind('mouseover', function(){do something});
};
var init;
init = function ()
{
bindAll();
...
};
$(document).ready(init());
它不起作用。但如果我通过替换:
将绑定放在计时器上bindAll();
带
tt = setTimeout('bindAll()', 1000);
它突然完美无缺。什么!??
答案 0 :(得分:5)
jQuery ready
需要一个处理程序,而不是一个函数调用。
// $(document).ready(init()); <-- Not working
$(document).ready(init); <-- Working!
答案 1 :(得分:4)
你没有将init传递给$(document).ready
,你正在传递任何init返回。
试试这个:
$(document).ready(init);
说明:
当您尝试传递该功能时,您实际上是在运行它。在运行它时,DOM还没有准备好,因此没有发生对元素的绑定,因为它不存在。
当你执行超时时,它起作用,因为DOM完成需要不到一秒的时间,这意味着当它运行时,元素就在那里,所以它可以绑定事件。
答案 2 :(得分:0)
只需将没有括号的init传递给ready函数。它会立即在您的情况下执行,而不是准备好文档:
$(document).ready(init);