0

我已经看过很多关于此的文章,但没有一篇涉及 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;
4

3 回答 3

0

尝试在此处添加分号:

$('#jsddm > li').bind('mouseover', jsddm_open);
$('#jsddm > li').bind('mouseout',  jsddm_timer);
于 2010-03-18T15:17:15.003 回答
0

已解决:此站点主要由 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();
}
于 2010-03-18T15:41:36.640 回答
0

代替 using .bind(), use.live()以便处理元素的所有未来实例。这应该解决ajax问题。

$(document).ready(function() {  
    $('#jsddm > li').live('mouseover', jsddm_open);
    $('#jsddm > li').live('mouseout',  jsddm_timer);
});
于 2010-03-18T15:44:56.087 回答