2012-01-10 8 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 Pageonload()関数にどのようにアクセスできますか)。ASP.NETコンテンツページのJavaScriptエラー

+1

エラーは何ですか? – user1231231412

+0

ドキュメントがロードされるまで待つべきです – mgraph

答えて

1

<script>ブロック内の "Test1()"への呼び出しが発生すると、その入力フィールドはまだDOMの一部ではありません。したがって、getElementById()への呼び出しはnullを返し、関数の最初の行は失敗します。

<script>ブロックをに移動すると、テキストボックスの後に動作するはずです。

編集 —また、幅に「px」を明示的に追加することもできます。

0

は、テキストボックスが存在しないため、スクリプトでのTest1を実行するときにです。この

<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

を試してみてください。コールをdocument.ready関数に置くか、テキストボックスの後にページのさらに下に移動する必要があります。

+0

document.ready jqueryなしではあまり役に立ちません – GNi33

0

まず、javascriptコードを実行するたびに、イベントのタグetherから直接、DOMレベルを読み込むのを待つ必要があります。

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

またはbodyタグの「onloadイベント」イベントでコードを実行します:

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

よう それとも、jQueryのを使用する場合は、上記を使用することができます。

だからのような何かを行うことができます
<script type="text/javascript"> 
     $(document).ready(function(){ 
     /* Code to execute */ 
     }); 
    </script> 
関連する問題