2012-01-10 72 views
0
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<script type="text/javascript"> 
    function Test1(w) { 
     document.getElementById('<%=TextBox1.ClientID%>').style.width = w; 
     return false; 
    } 
    Test1(10); // This line arises an error. Why ? 
</script> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <input id="Button1" type="button" value="button" onclick="Test1(10)" /> 
</asp:Content> 

从脚本调用函数Test1(10)时出现错误。但是当它点击按钮时,它可以正常工作。我如何从脚本调用函数(或者我如何访问ASP.NET Content Page中的onload()函数)?ASP.NET内容页中的javascript错误

+1

什么是错误? – user1231231412 2012-01-10 14:03:09

+0

你应该等到文件加载后 – mgraph 2012-01-10 14:05:27

回答

1

当您调用<script>块内的“Test1()”时,该输入字段尚未成为DOM的一部分。因此对getElementById()的调用将返回null,并且该函数的第一行将失败。

如果您将<script>块移动到之后的文本框中,它应该可以工作。

编辑 —你也可能想明确地追加“px”到你的宽度。

0

试试这个

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<script type="text/javascript"> 
    function Test1(w) { 
     document.getElementById('<%=TextBox1.ClientID%>').style.width = w; 
     return false; 
    } 
window.onload = function() { 
    Test1(10); // This line arises an error. Why ? 
} 
</script> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <input id="Button1" type="button" value="button" onclick="Test1(10)" /> 
</asp:Content> 
0

这是因为当你在脚本执行Test1的文本框不存在。您必须将呼叫置于document.ready函数中,或者在文本框之后将其移到页面的下方。

+0

document.ready不会做很多没有jQuery – GNi33 2012-01-10 14:10:43

0

首先你每次想要执行javascript代码时,即使直接从标签ether中取出事件,也必须等待加载dom级别。 所以,可以这样做:

<script type="text/javascript"> 
     window.onload =function() 
     { /* code */ } 
    </script> 

或身体标记的“的onload”事件执行代码: 像

<body onload="Test1(10);"> 
    </body> 

或者,如果您使用JQuery,你可以用上面的:

<script type="text/javascript"> 
     $(document).ready(function(){ 
     /* Code to execute */ 
     }); 
    </script>