2013-05-17 32 views
1

我有這樣的控制:用戶的文字輸入操作使用文本框

enter image description here

我試圖創造一種驗證,只要用戶輸入文本到文本框,「添加」按鈕,將啓用,當文本爲「」(空)時,「添加」按鈕被禁用。 我不想使用驗證器。

下面的代碼:

protected void addNewCategoryTB_TextChanged(object sender, EventArgs e) 
    { 
     if (addNewCategoryTB.Text != "") 
      addNewCategoryBtn.Enabled = true; 
     else 
      addNewCategoryBtn.Enabled = false; 
    } 

的problam是,當用戶輸入的文本,「添加」按鈕的功能從禁用到啓用(反之亦然)不會改變......

有什麼想法?

回答

6

它是Web窗體?在Web窗體中,TextBox的TextChanged事件在默認情況下不會觸發。 爲了激發事件,您必須將TextBox的AutoPostBack屬性設置爲true。

但是,這將執行一個HTTP後,什麼是醜陋的糾結,或者你可以用在一個UpdatePanel

一種更好的方法,就是要做到這一點使用jQuery做,在jQuery的,你將需要一些代碼,如:

$(document).ready(function() { 
    $("#<%= yourTextBox.ClientID %>").change(function() { 
     var yourButton = $("#<%= yourButton.ClientID %>") 

     yourButton.attr('disabled','disabled'); 
     yourButton.keyup(function() { 
      if($(this).val() != '') { 
       yourButton.removeAttr('disabled'); 
      } 
     }); 

    }); 
}); 
+3

+1 jQuery的:) – phadaphunk

+0

$(「#<%= aspControl.ClientID%>」)asp.net運行服務器端,並創建該控件的clientID的,jQuery的需要確定clientid以訪問正確的控制,它不會做它只需通過控制名稱。 – Bearcat9425

+0

謝謝。實際上,我不想使用jQuery,所以我想不同的方式來驗證它...謝謝! – omi

4

您需要使用Javascript完成此操作,因爲ASP.NET不能執行此類客戶端修改。考慮一下......每當你在文本框內按下一個字母時,它都必須回發並刷新頁面以確定文本框是否爲空。這是ASP.NET與Winforms/WPF不同的一種方式。

+0

偉大的答案!我的背景實際上是winforms,所以我需要這個提示! – omi

2

TextChanged事件將使服務器每次回發。你不需要增加這些任務的請求。

您可以使用jQuery來實現這個

var myButton = $("#btnSubmit"); 
var myInput=$("#name"); 
myButton.prop("disabled", "disabled"); 

myInput.change(function() { 
    if(myInput.val().length > 0) { 
    myButton.prop("disabled", ""); 
    } else { 
    myButton.prop("disabled", "disabled"); 
    } 
}); 

JS Fiddle Demo

你只需要當您使用服務器控件採取元素標識的照顧。爲此可以使用ClientID或設置屬性ClientIdMode="Static"

相關問題