這是一個典型的問題,即當您向JavaScript添加內容到JavaScript時,即使您調用 $ .validator.unobtrusive.parse(「form」);多次驗證器調用動態添加的內容使用不顯眼
好吧,這裏是很好的解決方案:解析之前剛剛乾淨的信息:
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");`
這是相當不錯的,而且似乎真的工作。但! 每個驗證被稱爲多次調用該塊:
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
您可以通過創建自定義的驗證並設置內部或調試輸出斷點很容易地檢查這種情況:
jQuery.validator.addMethod("checksalary",
function (value, element, param) {
return (!isNaN(value) && parseInt(value) > 0) || $("#" + param).attr('checked');
});
jQuery.validator.unobtrusive.adapters.add
("checksalary", ["param"], function (options) {
options.rules["checksalary"] = options.params.param;
options.messages["checksalary"] = options.message;
});
這看起來真的如果你的驗證器調用了幾次而不是一次,那麼這是非專業的。
在調用parse()之前是否應該清除其他任何信息?
假設你已經調用了parse()100次。我認爲客戶可以清楚地看到這種開銷。
UPDATE 好吧,我可以調試腳本tonns,結果發現,即使我們的形式清潔驗證信息,我們仍然沒有清洗這種綁定,在jquery.validate.js
引起線53this.submit(function (event) {
if (validator.settings.debug)
// prevent form submit to be able to see console output
event.preventDefault();
...
所以我創建的臨時醜陋修復這種情況下,適用於現在,但我相信應該有更好的周圍的方式,像更新驗證對象,而不是創造新的:
var validator = $.data(this[0], 'validator');
var skipReAttach = false;
if (validator) {
//return validator;
skipReAttach = true;
}
validator = new $.validator(options, this[0]);
$.data(this[0], 'validator', validator);
if (validator.settings.onsubmit) {
// allow suppresing validation by adding a cancel class to the submit button
this.find("input, button").filter(".cancel").click(function() {
validator.cancelSubmit = true;
});
// when a submitHandler is used, capture the submitting button
if (validator.settings.submitHandler) {
this.find("input, button").filter(":submit").click(function() {
validator.submitButton = this;
});
}
// validate the form on submit
if (skipReAttach)
return validator;
this.submit(function (event) {
if (validator.settings.debug)
// prevent form submit to be able to see console output
event.preventDefault();
當然 - 現在只應調用 $.validator.unobtrusive.parse("form");
。
但是,解決這個問題的好方法是什麼?
對不起,我在這裏閱讀配置文件,但沒有看到問題? – mcgrailm 2012-03-27 12:30:29
嗨。我問過如何避免驗證器的多次調用。並自行找到解決方案。 但一般問題沒有解決,因此我修改了我的消息,使其更「喜慶」。 – 2012-03-29 04:01:54