2011-08-10 9 views
2

これで、マルチビュー内のページに複数のASPテキストボックスとASPボタンがあります。 各テキストボックスに関連付けられた送信ボタンは、テキストボックスにテキストが入力されている場合にのみ有効にする必要があります。だから、私はこれを処理するJavaScript関数を書いて、私はaspのテキストボックスにテキストがある場合にのみaspボタンを有効にします

function checkEmptyTxtBox(val, savebtn) { 
     if (val.value.replace(/^\s+|\s+$/g, "") == "") 
      document.getElementById(savebtn).disabled = true; 
     else 
      document.getElementById(savebtn).disabled = false; 
    } 

        <asp:TextBox 
        ID="txt_Comments_2" 
        runat="server" 
        Wrap="true" 
        TextMode="MultiLine" 
        onkeyup="checkEmptyTxtBox(this,'<%= btnSave2.ClientID %>')"> 
       </asp:TextBox> 

       <asp:Button 
        ID="btnSave2" 
        runat="server" 
        text="Save" 
        Enabled="False"/> 

これはVS2010であるというエラー「のdocument.getElementById(...)」がnullであるか、ないオブジェクトを」取得しています。

+0

[RequiredFieldValidator](http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.requiredfieldvalidator.aspx)を使用してください。 –

+0

[保存]ボタンを有効にしているときに、テキストボックスがnullの場合があるためです。 – Mia

答えて

2

。あなたがレンダリングされたソースを見れば、それは次のようになります。

onkeyup="checkEmptyTxtBox(this,&#39;&lt;%= btnSave2.ClientID %>&#39;)" 

それは文字通り<%= %>が含まれています。

あなたはこのように、ページの読み込みに属性を設定できます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    txt_Comments_2.Attributes["onkeyup"] = "checkEmptyTxtBox(this,'" + btnSave2.ClientID + "')"; 
} 

EDIT:多くの人が指摘してくれるはずのよう

。これは実際にはHTMLでのイベント登録を行う「最良の」方法ではありません。むしろ、JavaScriptはイベントリスナーを追加することによってkeyupイベントにバインドする必要があります。例えば、jQueryを使って、それは次のようになります。

$(document).ready(function() { 
    $('#<%: txt_Comments_2.ClientID %>').keyup(function() { 
     if ($(this).val().replace(/^\s+|\s+$/g , "") == "") { 
      $('#<%: btnSave2.ClientID %>').attr('disabled', 'disabled'); 
     } 
     else { 
      $('#<%: btnSave2.ClientID %>').removeAttr('disabled'); 
     } 
    }); 
}); 

そして、あなたのASP.NETマークアップは次のようになります。

<asp:TextBox 
    ID="txt_Comments_2" 
    runat="server" 
    Wrap="true" 
    TextMode="MultiLine" /> 

<asp:Button 
    ID="btnSave2" 
    runat="server" 
    text="Save" 
    Enabled="False"/> 

これは、イベント登録を使用してHTMLを乱雑にしないという利点があります。 KnockoutJSのようなもので、これを行う方法が他にもあるかもしれません。

+0

JavaScriptでonkeyupイベントハンドラを追加する方が良いでしょう。 HTMLタグにイベントハンドラを追加することはベストプラクティスとはみなされません。 http://www.quirksmode.org/js/events_tradmod.html –

+0

私は同意しますが、私は元の問題を解決しようとしていました。 – vcsjones

0

これは、あなたのボタンのIDがbtnSave2ですが、<%= btnSave2.ClientID%>をsavebtnとして渡している可能性があります。 Javascriptは指定したIDで要素を見つけることができません。

また、似たような問題を抱えていて、RegisterStartupscriptを実行していないという人もいました。

これらをチェックしてみて下さい:

http://forums.asp.net/t/1160208.aspx/2/10?document+getelementbyid+is+null+or+not+an+object http://msdn.microsoft.com/en-us/library/asz8zsxy.aspxあなたは<%= %>を使用してサーバー側のコントロールの属性を設定することはできません

関連する問題