jQuery驱动的应用程序。 没有警报会无法工作()

我已经看过很多关于这个的文章,但是没有关于jQuery的文章,所以我在这里…我正在实现一个从http://javascript-array.com/scripts/jquery_simple_drop_down_menu/到现有应用程序的脚本版本; 但是,如果没有添加alert(’msg …’)作为$(document).ready()调用中的第一个方法,我就无法工作。

这似乎与加载时间无关……无论我等多久,菜单都不起作用。 setTimeout()也不起作用。 然而,添加alert(),它就像一个魅力。 我也可以通过Firebug正确执行绑定。

var timeout = 500; var closetimer = 0; var ddmenuitem = 0; function jsddm_open() { jsddm_canceltimer(); jsddm_close(); ddmenuitem = $(this).find('ul').css('visibility', 'visible');} function jsddm_close() { if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');} function jsddm_timer() { closetimer = window.setTimeout(jsddm_close, timeout);} function jsddm_canceltimer() { if(closetimer) { window.clearTimeout(closetimer); closetimer = null;}} $(document).ready(function() { $('#jsddm > li').bind('mouseover', jsddm_open) $('#jsddm > li').bind('mouseout', jsddm_timer)}); document.onclick = jsddm_close; 

不使用.bind() ,而是使用.live()以便处理所有未来的元素实例。 这应该解决ajax问题。

 $(document).ready(function() { $('#jsddm > li').live('mouseover', jsddm_open); $('#jsddm > li').live('mouseout', jsddm_timer); }); 

尝试在此处添加分号:

 $('#jsddm > li').bind('mouseover', jsddm_open); $('#jsddm > li').bind('mouseout', jsddm_timer); 

已解决:放置的网站主要由Ajax驱动; 因此,DOM被视为“准备好”,尽管脚本仍在后台处理(即菜单仍在加载时)。

在菜单加载器之后放置初始化函数使其工作。

 // DOES NOT WORK $(document).ready(function() { loadMenus(); menuInit(); }); function loadMenus() { // load menu script... } // WORKS $(document).ready(function() { loadMenus(); }); function loadMenus() { // load menu script... menuInit(); }