2012-01-18 22 views
0

單擊一個按鈕時,如果另一個表單在同一頁(不是ligthbox)中有效,我想要一個表單。該驗證是我創建的自定義驗證並且工作正常。 這是鑑於自定義驗證不適用於Ajax MVC調用

$("#btnSave").click(function (e) { 

      if ($("#GeneralButtonFrm").valid()) { 

       $("#ButtonFrm").submit(); 

      } else { 
       //Error Message 
      } }); 

代碼的問題是,提交的動作,而無需等待自定義驗證其返回false的響應執行。

任何想法爲什麼會發生這種情況?注:我說我沒有使用ligthbox呈現部分becouse在這種情況下,解決方案將是jQuery.validator.unobtrusive.parse('#form');

謝謝

+0

如果GeneralButtonFrm使用AJAX呈現,你必須使用jQuery.validator.unobtrusive.parse,或者是它使用ajax的自定義驗證器?使用ajax的驗證器有點棘手,你需要返回false它們是無效的,那麼當你從服務器得到答案時,如果該值有效,則需要設置一個標誌,然後重新驗證表單並根據標誌返回true或false。我希望我很清楚:D – Anders 2012-01-18 14:19:30

+0

感謝您的快速回答。你是什​​麼意思與「無效時返回假」?以及如何/從哪裏可以得到服務器的答案? – 2012-01-18 16:12:06

+0

只爲了讓一切順利,你有一個自定義的規則,試圖驗證使用AJAX? – Anders 2012-01-20 12:00:09

回答

0

你仍然非常含糊,在你的問題。但我認爲你想要的是調用ajax並進行服務器端驗證。如果是這樣,問題是,你的驗證將Ajax請求之前,因爲Ajax請求是異步返回..做這個

<html> 
    <head> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 
     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script> 
     <script type="text/javascript"> 
      jQuery.validator.addMethod("ajaxCustom", function (value, element) { 
       var wrap = $(element); 
       var url = wrap.data("customAjaxUrl"); 
       var result; 

       $.ajax({ 
        type: 'GET', 
        url: url, 
        dataType: 'json', 
        success: function (data) { 
         result = data.valid; 
        }, 
        data: { value: value, id: element.id }, 
        async: false 
       }); 

       return this.optional(element) || result; 

      }, "Ajax"); 

      $.validator.unobtrusive.adapters.addBool('ajaxCustom'); 
      </script> 
     <style type="text/css"> 
      .input-validation-error { 
       background: red; 
      } 

     </style> 

    </head> 
    <body> 

     <form action="/"> 
      <input data-val-ajaxCustom="Tuckel" data-val="true" data-val-required="Its required" data-custom-ajax-url="validate.html" /> 
      <button type="submit">Submit</button> 
     </form> 
    </body> 
</html>