2011-01-10 73 views
1

我有一個奇怪的行爲,我的jQuery驗證腳本。未使用jQuery觸發的回傳方法驗證

我有一個提交按鈕(ID = _btnSave)的簡單表單。 我驗證三個文本字段:名字,姓氏和電子郵件。

[NOT WORKING] - 當表單填寫正確時,我提交按鈕上的方法不會被觸發:OnClick =「_ btnSave_Click」。

[工作] - 我寫下一個錯誤的電子郵件地址,然後我改正它,點擊提交按鈕,我的服務器端方法被調用。

總結情況:如果我不觸發電子郵件驗證,_btnSave_Click不會被解僱。

頁面在兩種情況下均刷新。

<asp:Button ID="_btnSave" OnClick="_btnSave_Click" CssClass="button big default" runat="server" Text="<%$ Resources:Resource, SAVE_CHANGES %>" /> 

$("#form1").validate({ 
      rules:{ 
       <%=_txtEmail.UniqueID %>:{ minlength:5, required:true, email:true, 
        remote: { 
         url: "/Services/ValidatorService.asmx/ValidateEmail", 
         dataType:"json", 
         type:"post", 
         data: { 
          email: function() { return $("#<%=_txtEmail.ClientID%>").val();}, 
          contactUID: function() { return $("#<%=_hidContactUID.ClientID%>").val();} 
         } 
        } 
       }, 
       <%=_txtFirstName.UniqueID %>: { required:true}, 
       <%=_txtLastName.UniqueID %>: { required:true}, 
      }, 
      invalidHandler: function(form, validator) { 
       errorContainer.fadeIn(); 
      }, 
      errorElement: "span", 
      errorClass:"errortxt", 
      highlight: function(element, errorClass) { 
       $(element).parent().parent().addClass("error"); 
      }, 
      unhighlight: function(element, errorClass) { 
        $(element).parent().parent().removeClass("error"); 
       if (this.numberOfInvalids() == 0) { 
        errorContainer.fadeOut(); 
       } 
      }, 
      messages: { <%=_txtEmail.UniqueID %>: { remote : "<%=EmailUsed %>" } 
      }, 
      errorPlacement: function(error, element) { 
        error.insertAfter(element); 
      } 
     }); 

     $("input").click(function(){_defaultButton = $("#<%=_btnSave.ClientID%>");}); 
    }); 

感謝您的幫助。

格雷格

+0

我認爲你應該使用ClientID而不是UniqueID,儘管你應該有比這更嚴重的問題。總體情況如何?涉及的任何UpdatePanels?你提交的控件是什麼樣的? – 2011-01-10 15:22:11

回答

3

我知道這個問題是舊的,但我最近遇到同樣的問題,無法在網上找到答案。在驗證器選項中添加一個自定義提交處理程序爲我解決了問題:

 $("#form1").validate({ 
      submitHandler: function (form) { 
       __doPostBack("_btnSave", "OnClick"); 
      } 
      // your other options 
     });