2010-09-02 61 views
1

爲什麼以下工作適用於onLoad,而不是onClick,以及解決方案是什麼? 在此先感謝...javascript setAttribute'className'在onLoad上工作,但不在onClick

<head> 
    <title>Untitled Page</title> 
    <LINK href=CSS/showdetails.css type=text/css rel=stylesheet /> 
</head> 
<body OnLoad="javascript:showdetails()"> 

<script language=JavaScript src=js/showdetails.js type=text/javascript></script> 

<div id="divResults" style="OVERFLOW: auto; HEIGHT: 480px;"> 
<span id="ShowResults" style="VISIBILITY: hidden">Display Results</span> 
<p><input id="Button1" type="button" value="button" /></p> 
</div> 

<script type="text/javascript"> 

var btn = document.getElementById('Button1'); 
btn.onclick = function() {showdetails();}; 

function showdetails() { 
    var xc = document.getElementById('ShowResults'); 

    var top_ul = document.createElement('ul'); 
    top_ul.setAttribute('className','detclass'); 


    var li1 = document.createElement('li'); 
    li1.appendChild(document.createTextNode('craig')); 


    var ul2 = document.createElement('ul'); 
    var li2 = document.createElement('li'); 
    li2.appendChild(document.createTextNode('Mike')); 

    ul2.appendChild(li2); 


    li1.appendChild(ul2); 
    top_ul.appendChild(li1); 

    xc.appendChild(top_ul); 

    var vis = "visible"; 
    xc.style.visibility = vis; 
    } 
</script>     
</body> 
</html> 
+0

請下次使用代碼標籤,閱讀起來要容易得多。 – onigunn 2010-09-02 20:39:06

+0

將腳本放在底部,就在標記之前,解決了與此問題相關的所有問題...... – BGerrissen 2010-09-02 20:50:01

+1

究竟是在工作onload而不是onclick?另外,要設置class屬性,可以使用'top_ul.setAttribute('class','detclass');'或'top_ul.className ='detclass';' – aularon 2010-09-02 20:54:07

回答

0

如果您的文檔中是這樣的腳本?執行此腳本時,是否有可能包含Button1的DOM元素尚未加載?你可以嘗試把它放在你的body之後的script標籤中,而不是放在你的頭上,或者把它封裝在一個函數中,然後在一個onload元素中執行它。

編輯:現在問題有代碼標記,我可以看到它是在腳本標記。我仍然建議將它包裝在一個函數中,並使用onLoad進行調用,以確保在腳本執行之前完全加載DOM。

+0

對不起,沒有代碼標籤的版本正在顯示,當我寫上述,所以我沒有看到你把它放在哪裏。我撤回我的問題。 – 2010-09-02 20:41:46