2010-06-23 70 views
12

我有一些代碼,我需要一個控制兩個獨立的必填字段驗證,無論是在單獨的驗證組,然後由兩個獨立的按鈕驗證。我如何關閉ASP.NET所需的字段校驗「失去焦點」的行爲

這種方法效果很好被點擊的按鈕時,但兩者的驗證表明,如果我在文本框中輸入一個值,然後將其刪除。

有沒有辦法將此「失焦」驗證關閉?我只需要它來驗證點擊按鈕的時間。

編輯

不幸的是,如果我設置EnableClientScript = false,那麼我沒有任何客戶通知。我想要的是動態錯誤消息顯示(有效地在按鈕的OnClientClick事件中),而不是文本框的「丟失焦點」。

有什麼方法可以禁用或「解除」lostfocus客戶端事件?

編輯

組合dDejan的回答和womp的ANSWEER here排序的問題完美。

我的最終代碼看起來像這樣(爲別人有類似的情況)......

的Javascript ...

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('body').fadeIn(500); 

     //Turn off all validation = its switched on dynamically 
     $.each(Page_Validators, function(index, validator) { 
       ValidatorEnable(validator, false); 
     }); 
    }); 

    function ToggleValidators(GroupName) { 

     $.each(Page_Validators, function(index, validator) { 
      if (validator.validationGroup == GroupName) { 

       ValidatorEnable(validator, true); 

      } else { 
       ValidatorEnable(validator, false); 
      } 
     }); 
    } 

</script> 

ASPX控制示例...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox> 
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator> 

ASPX按鈕代碼...

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/> 

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" /> 

因此,直到用戶單擊「獲取電子郵件確認碼」按鈕或「註冊」按鈕時,纔會進行驗證。

如果他們點擊「獲取郵件驗證碼」按鈕,所有的控件從文本框中驗證除了當用戶輸入電子郵件驗證碼,我們只看到一個驗證信息。

如果他們點擊「註冊」按鈕,然後所有的控件的驗證和我們只看到一個驗證消息。

如果按下其中一個按鈕,用戶可以追溯到,添加,然後刪除一些文本,然後我們只看到一個驗證。在此更改之前,您曾經看到兩條消息都說同一件事。

感謝您的幫助球員

+0

我知道這可能是舊的,但一旦驗證已被激活的onsubmit,你怎麼再關閉焦點,從而使錯誤信息消失,直到再次點擊提交按鈕? – SollyM 2015-07-03 10:15:31

回答

5

您可以使用ValidatorEnable函數來設置驗證器是否處於「活動」狀態,或者不使用客戶端代碼。基本上,它是這樣的

var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); //where state is boolean 

您也可以觸發驗證,以驗證某些事件(例如像按鈕的點擊)使用ValidatorValidate(validator)功能。

我不知道這會更好地爲您(啓用/禁用觸發驗證的驗證或自定義),但我認爲這篇文章將引導你在正確的方向

ASP.NET Validation in Depth

+0

我知道這可能是舊的,但一旦Validator激活onSubmit,如何在焦點上再次關閉它,以便錯誤消息消失,直到再次單擊提交按鈕? – SollyM 2015-07-03 10:15:06

0

您可以通過設置關閉JavaScript驗證EnableClientScript =「假」,將擺脫失去焦點的驗證。

2

如果EnableClientScript = true,則無法解除它們。

你可以做的是將其設置爲false。然後創建一個在您的提交按鈕onClientClick事件上調用的JavaScript驗證方法。

在你的方法,你就必須調用ValidatorValidate(控制),要驗證客戶端

每個控制這裏有一個例子:

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

0

您可以使用自定義驗證控件而是使用客戶端上的Javascript或服務器上的事件處理程序驗證輸入。確保在驗證控件上設置ValidateEmptyText =「true」,否則事件不會在空字段上觸發。

0

嘗試啓用兩個按鈕單擊使用JavaScript和禁用它的文本框模糊事件。

0
var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); 

它是工作在JavaScript,但,當我們使用服務器端的page.Isvalid功能,它會創建檢查網頁是否有效的問題。

0

嘗試重置輸入控件的onchange事件。

$(document).ready(function() { 
     $("#controlid").each(function() { this.onchange = null; }) 
    }); 
0

只需在page_load事件鍵入此代碼

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);");