仅当asp文本框中有文本时才启用asp按钮

时间:2011-08-10 18:21:15

标签: javascript asp.net visual-studio-2010

好的,所以我在多视图的页面上有多个ASP文本框和ASP按钮。 只有在文本框中输入文本时,才应启用与每个文本框关联的提交按钮。所以,我写了一个Javascript函数来处理这个,我收到一个错误,说 “document.getElementById(...)'为null或者不是对象” < / p>

    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上。

2 个答案:

答案 0 :(得分: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 + "')";
}

修改

许多人愿意指出;这不是用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。

答案 1 :(得分:0)

这可能是因为你的按钮的ID是btnSave2,但你正在传递&lt;%= btnSave2.ClientID%&gt;作为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