2010-03-18 35 views
0

我看過很多關於這方面的文章,但都沒有涉及jQuery,所以我在這裏......我正在將http://javascript-array.com/scripts/jquery_simple_drop_down_menu/的一個腳本版本實現到現有的應用程序中;但是,如果不添加alert('msg ...')作爲$(document).ready()調用中的第一個方法,我無法使其工作。jQuery驅動的應用程序。 ()

這似乎與加載時間沒有任何關係......無論等待多久,菜單都不起作用。 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; 

回答

0

而不是使用.bind()的,使用.live()使這些元素的所有未來實例得到照顧。這應該解決ajax問題。

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

我完全忘了$ .live()。這也起作用(並且更清潔)! – 2010-03-18 15:48:27

0

嘗試增加分號這裏:

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

我在我的版本上有分號。這不是問題。 – 2010-03-18 15:29:35

+0

@ webjawns.com - 在你發佈的內容中你不會......如果你沒有發佈實際的代碼,很難提供幫助 – 2010-03-18 15:41:36

+0

即使沒有分號,代碼仍然有效。 這是一個概念性的問題,我需要解決......代碼只是在那裏畫的圖片。但我現在很好。我想到了。謝謝你的幫助。 – 2010-03-18 15:46:37

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(); 
}