2012-05-16 42 views
0

我有以下問題:在客戶的主頁上,導航欄是由javascript加載的,但我需要更改一些URL。如果我剛剛在$(document).ready()上啓動腳本,它將在客戶腳本之前運行,並且不起作用。我只能使用setTimeout函數等待另一個腳本準備就緒,但它不是很好,也不安全。我無法更改網站上的任何內容,只添加一個JavaScript - 是否有一種方法可以在另一個之後進行計時?time javascript

+0

什麼是客戶的腳本? –

+0

您可以使用jQuery使用延遲完成的調用。 –

+0

@MarcusRecck他將完成的方法應用於什麼延遲對象? –

回答

1

您可以使用重複的setTimeout,以檢查菜單是否可訪問。

function check_menu(){ 
    if(document.getElementById('my_menu')==null){ 
     setTimeout('check_menu()',500); 
    } else { 
     //do some stuff 
    } 
} 
+0

-1應該使用setInterval。 – iambriansreed

+0

@iambriansreed爲什麼'setInterval' vs'setTimeout'保證downvote?由於對'setTimeout'有更多的控制權,我實際上會在'setInterval'上建議'setTimeout'。我建議的唯一改變是使用'check_menu'而不是''check_menu()「' –

+0

setTimeout在這裏使用,因爲我們只想調用該方法一次,當我們想要停止時更容易。 – djleop

1

如果您有喜歡的ID或類菜單信息,使用元素的onLoad() jQuery的方法。例如,如果代碼異步加載,並且將onload添加到內容完成後它應該觸發的最後一個元素之一。

$.post('AsyncCodeLoad.php', function(data) { 
    $('#lastElementToLoad').onLoad(RunMyFunction); 
}); 

或者,如果你有沒有機會插入你的代碼進入異步加載只需添加到</body>的底部:

$('#lastElementToLoad').onLoad(RunMyFunction); 

只是一個想法。

1

是的,將腳本添加到<body />標記的底部,以確保它在所有其他腳本運行前都不會運行。這隻會在您的客戶同步加載導航鏈接時起作用。

如果導航是異步加載的,請使用JS的setInterval重複檢查導航的內容以獲得鏈接。當您確定已添加鏈接時,請取消您的間隔檢查並調用腳本的邏輯入口點。

乾杯

0

小提琴:http://jsfiddle.net/iambriansreed/xSzjA/

的JavaScript

var 
menu_fix = function(){ 
    var menu = $('#menu'); 
    if(menu.length == 0) return; 
    clearInterval(menu_fix_int); 
    $('a', menu).text('Google Search').attr('href','http://google.com');   
}, 
menu_fix_int = setInterval(menu_fix, 100); 

HTML

<div id="menu"><a href="http://bing.com">Bing Search</a></div>​