關于<script></script>位置的問題
<!DOCTYPE?HTML> <html> <head> <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"> <title>display</title> ????<script?type="text/javascript">? ????????function?hidetext()?? ????????{?? ????????var?mychar?=?document.getElementById("con"); ????????mychar.style.display="none"; ????????}?? ????????function?showtext()?? ????????{?? ????????var?mychar?=?document.getElementById("con"); ????????mychar.style.display="block"; ????????} ????</script>? </head>? <body>?? ????<h1>JavaScript</h1>?? ????<p?id="con">做為一個Web開發師來說,如果你想提供漂亮的網頁、令用戶滿意的上網體驗,JavaScript是必不可少的工具。</p>? ????<form> ???????<input?type="button"?onclick="hidetext()"?value="隱藏內容"?/>? ???????<input?type="button"?onclick="showtext()"?value="顯示內容"?/>? ????</form> </body>? </html>
這個任務代碼中,<script>…var mychar = document.getElementById("con");
…</script>在<p id="con">…</p>之前,按照瀏覽器從上到下的解析渲染順序,此時javascript是無法獲取id="con"的元素的,所以后邊兩個顯示和隱藏的button應該沒有反應才對,,,可是實際上,代碼執行卻沒有任何問題,
比如下圖:<script></script>位置在前在后,結果可大不一樣啊
求解答??!
2016-01-29
第一個例子因為有了??onclick="hidetext() ?這句代碼,會直接在全局尋找并執行hidetext() 這個函數 ?javascript代碼所以在前在后沒區別 ?第二個例子就像你說的一樣,javascript代碼在前面并未或得到con元素,所以返回值為空,在后面就獲得了con的元素,所以有返回值 ??
2016-01-29
貌似第一章講過,通過事件調用執行的function對位置沒什么要求。
2016-01-29
前一個代碼執行沒有問題是因為當button顯示出來時,script標簽已經加載完畢,可以執行,后一個的差異是因為當script標簽在頭部獲取id時,body部分未加載出來,瀏覽器無法獲取所以值為null。