2010-09-02 54 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