无法设置未定义或 null 引用的属性"onclick"

 <div>
<asp:button id="btn1" runat="server" OnClick="btn1_click" text="js测试按钮"/>
</div>

<script type="text/javascript">window.onload = initAll;
function initAll() {
document.getElementById("btn1").onclick = initRedirect;//该行未取到"btn1",这是为什么???谢谢

function initRedirect() {
if (confirm("Are you sure you want to do that?")) {
alert("You said yes");
}
else {
alert("You said no");
}
}
}</script>

你放自定义控件里面了吧,id会变,改成这样

asp.net 母版,自定义控件中的控件客户端ID变化解决办法

 document.getElementById("<%=btn1.ClientID%>").onclick = initRedirect;

服务器控件绑定js要设置两个属性

解决了,原来是ID在客户端中的源代码中变了。改成document.getElementById("<%=btn1.ClientID%>").onclick = initRedirect;即可。但是为什么ID会变呢?

//元素绑定事件的写法不对,我给你规范了一下,贴到html文件中可以看到效果
<meta charset="utf-8">
<script>
    window.onload = initAll; 
    function initAll(){
        var btn=document.getElementById("btn1");
        if(btn.attachEvent){
            document.getElementById("btn1").attachEvent('onclick', initRedirect);//兼容IE
        }
        else if(btn.addEventListener){
            document.getElementById("btn1").addEventListener('click',initRedirect);//兼容谷歌和火狐
        }

    }
    function initRedirect() { 
        if (confirm("Are you sure you want to do that?")) 
        {   
            alert("You said yes"); 
        } 
        else { alert("You said no"); } 
    } 
</script>
<input id="btn1" type="button" value="点击按钮" />