2012-09-27 22 views
1

我有基於JQuery的選項卡導航,只有當它放在菜單的html之後纔有效。如果它放在最後,它也可以工作,但是當我將相同的腳本放在$(document).ready頂部時,它就會中斷。

我認爲這(放置在頁面的頂部):

<script type="text/javascript"> 
$(document).ready(function(){ 
    mouseovertabsmenu.init("mytabsmenu", "mysubmenuarea", true); 
}); 
</script> 

將與此相同:

<script type="text/javascript"> 
     mouseovertabsmenu.init("mytabsmenu", "mysubmenuarea", true); 
    </script> 
</html> 

這是放置在網頁和作品的底部。我如何能夠將該功能置於頂端,甚至可以將其包含在單獨的文件中?

+3

如果你在''jQuery''包含'script'塊之前加上'script' block * ...你將會調用一些尚未提供的東西。而且,在全局範圍內,您應該默認爲'jQuery()'而不是'$()'。但我的猜測是,你正在試圖在被包含之前使用jQuery(並且瀏覽器可以訪問'$'或'jQuery')。 –

回答

0

建議,將這個腳本在頁面結束的原因,是爲了讓HTML元素被加載到頁面上,您嘗試訪問之前..

無論你在哪裏放置代碼最好是在DOM準備好事件,確保了完整的HTML文檔是否正確裝入您嘗試訪問的元素在頁面之前,包..

也許在你的情況

<script type="text/javascript"> 
     mouseovertabsmenu.init("mytabsmenu", "mysubmenuarea", true); 
    </script> 

似乎是工作當沒有裝入DOM準備好的時候因爲它的範圍被阻止通過DOM準備的功能是無法訪問的

+1

$(document).ready(...)僅在加載所有HTML後調用,這就是爲什麼它可以放置在頁面的任何位置 –

+0

在頁面加載期間在jQuery.ready()塊中包裝每個Javascript塊不是,國際海事組織是一種可接受的做法 –

+0

@JaredFarrish我不認爲他們說要包裝每一塊Javascript,但將DOM相關的代碼包裝在它當中是一個很好的做法......就像需要DOM中某些東西可用的事件綁定或操作一樣。 – Ian

1

我有這個問題,我曾經在jQuery的後頭部用這個包括鏈接:

$(document).ready(myfunction()); 

這種失敗,因爲對象不是加載。我應該把我的呼叫打包在一個函數中:

$(document).ready(function() { 
    myfunction(); 
}); 

只有在文檔被正確加載之後,它才按預期工作。