3

要覆蓋查詢驗證插件,在plaugsin document,該建議的方法是:覆蓋jQuery的驗證默認設置在MVC4

$(".selector").validate({ 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) { 
     var message = errors == 1 
      ? 'You missed 1 field. It has been highlighted' 
      : 'You missed ' + errors + ' fields. They have been highlighted'; 
     $("div.error span").html(message); 
     $("div.error").show(); 
     } else { 
     $("div.error").hide(); 
     } 
    } 
}) 

但是,它不MVC4與jQuery的1.7.1.js工作。它似乎jquery.validate.unobtrusive.js阻止覆蓋句柄被調用。如果不包含此文件,則會調用覆蓋句柄並顯示消息。任何人都有同樣的問題?

+2

jQuery.validate和微軟的不顯眼的驗證不玩好起來 - http://www.tigraine.at/2011/08/26/jquery-validate-and-microsofts-unobtrusive-validation-dont-玩好一起/ –

回答

3

我終於按照Bruce的建議工作。訣竅是在連接自定義的處理程序之前刪除舊的處理程序。您可以用相同的方式覆蓋其他設置。微軟應該加快解決它的jquery.validate.unobtrusive.js以使用jquery.validate。據報道有unobtrusive [version="2.0.20710.0"] breaks jquery-1.9.0

$('form').each(function() { 
    $(this).unbind("invalid-form.validate"); // remove old handler!!!! 
    $(this).bind("invalid-form.validate", function(e, validator) { 
     //alert("ok"); 
     var errors = validator.numberOfInvalids(); 
     if (errors) { 
      var message = errors == 1 
       ? 'You missed 1 field. It has been highlighted' 
       : 'You missed ' + errors + ' fields. They have been highlighted'; 
      $("div.error span").html(message); 
      $("div.error").show(); 
     } else { 
      $("div.error").hide(); 
     } 
    }); 
}); 
1

的原因,這是行不通的是驗證已經被不顯眼的插件創建的,所以當你打電話

$(".selector").validate({..}) 

你剛纔得到的已經創建的校驗器實例回來,你的選擇是不應用。不過,我認爲你可以通過這種方式更改設置。

<script> 
    $(function() { 

     // get the validator instance 
     var v = $('form').validate(); 

     // overwrite the invalidHandler with your own function 
     v.settings.invalidHandler = function(form, validator) { 
      // your stuff here 
     }; 
    }); 
</script> 

注意,這將覆蓋「不顯眼」 invalidHandler功能,所以你不會得到的「不顯眼」的功能部分。

+1

感謝您的意見。但是,它不適合我。自定義處理程序未被調用。 – YuMei