Включите кнопку asp, только если в текстовом поле asp есть текст - PullRequest
2 голосов
/ 10 августа 2011

Хорошо, у меня есть несколько текстовых полей ASP и кнопок ASP на странице в многовидовом представлении.Кнопка отправки, связанная с каждым текстовым полем, должна быть включена, только если в текстовое поле введен текст.Итак, я написал Javascript-функцию для обработки этого, и я получаю сообщение о том, что "document.getElementById (...) 'является нулевым или нет объектом"

    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 ]

2 голосов
/ 10 августа 2011

Вы не можете установить атрибут элемента управления на стороне сервера, используя <%= %>.Если вы посмотрите на визуализированный источник, он выглядит так:

 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.

0 голосов
/ 10 августа 2011

Это может быть потому, что идентификатор вашей кнопки - btnSave2, но вы передаете <% = btnSave2.ClientID%> в качестве savebtn. Javascript не может найти элемент по идентификатору, который вы указали.

Кроме того, я только что прочитал о людях, у которых была похожая проблема, и их мнение было то, что они не делали 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...