放在head中的JS代碼會在頁面載入完成之前就讀取,而放在body中的JS代碼,會在整個頁面載入完成之後讀取。
那麼有什麼不同呢?先看一個例子:
一個二級級聯動態下拉式清單方塊,一級分類(即大類別)id="vSort0".
<head>
function changelocation(id)
{…………}
</head>
<body><select class="input1" id="vSort0" name="vSort0" onChange="changelocation(document.form4.vSort0.options[document.form4.vSort0.selectedIndex].value);" style="width:100px;">……省略……</select>
………………
</body>
現在有個js指令碼:
<script LANGUAGE= "JavaScript" >
changelocation(document.form4.vSort0.options[document.form4.vSort0.selectedIndex].value); //初始化第一個一級分類的二級分類,去掉後第一個一級分類的二級分類在頁面載入之後不顯示。回選才顯示。將一級分類的value傳給changelocation()函數,產生二級分類的列表
</script>
那麼把這個js指令碼放head裡面還是body裡面呢?
答案是不僅要放到body裡面,而且還得放到定義id='vSort0'的列表框後面,因為這個js指令碼中有document.form4.vSort0.selectedIndex,如果放到head裡或者body的id='vSort0'前,頁面載入後順序執行代碼,執行到這個js發現vSort0未定義(即undefind),這個js也就失去了作用。
而為什麼我們經常看到有很多的人把js指令碼放到head裡面沒事呢?對!
就是因為你看到的在head裡的js代碼有onclick等事件傳遞了變數給函數。
這就告訴我們,如果我們想定義一個全域對象,而這個對象與頁面中的某個按鈕(等等)有關時, 我們必須將其放入body中,道理很明顯:如果放入head,那當頁面載入head部分的時候,那個按鈕(等等)都還沒有被定義(也可以說是還沒有被加 載,因為載入的過程就是執行代碼的過程,包括了定義),你能得到的只可能是一個undefind。