我設置的是一個有兩個主要部分的大表單。用戶填寫一些基本信息的第一部分。第二部分用戶添加了一些'尺寸'選項,其中可能有多個。尺寸信息填寫在面板中,然後「保存」,在其他地方克隆表格,然後擦拭面板以增加其他尺寸。當這個「保存」發生時,我只對錶單的那一部分進行驗證。Jquery分段驗證只能在最初工作
$.validator.addMethod("pageRequired", function(value, element) {
if (valid_distributions > 0) {
$('#distributor-select').prop('required', false)
}
if (current_page == 1) {
return this.optional(element);
}else if (current_page == 2) {
return !this.optional(element);
} else {
return "dependency-mismatch";
}
}, $.validator.messages.required)
這個塊是切換窗體前半部分的需求。基本上,我遇到了一些不好的行爲,有時我可以驗證表單的底部,但是當保存底部時,會告訴Jquery驗證整個表單。
我知道我的條件是需要或不需要的元素是射擊,但仍然需要。
var v = $("#beer-create-form").validate({
debug: true,
rules: {
'keg_sizes[]': {
required: true
}
},
messages: {
'keg_sizes[]': 'Choose at least one keg size'
},
errorClass: "error",
errorPlacement: function (error, element) {
if (element.hasClass('kegsize-toggle')){
error.insertAfter(element.parents().find('.distributor-name'));
}else if (element.hasClass('price')) {
console.log('price');
}
},
highlight: function(element, errorClass) {
$(element).addClass(errorClass);
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
}
});
$(document).on('click', '.save-listing', function(e) {
current_page = 1;
if (v.form()) { // if the form is valid, proceed to:
saveBeerPanel(); //clones the panel being filled out with all the info
wipeBeerPanel(); // clears all the info previously filled out so a new listing can be added
valid_distributions += 1 // keeps track that there is at least one valid distribution
}
e.preventDefault();
});
我試圖與此代碼更改 '需要' 開關:
if (current_page == 1) {
console.log('top is optional');
return $(element).prop('required', false)
}else if (current_page == 2) {
return $(element).prop('required', true)
} else {
return "dependency-mismatch";
}
...但是,這似乎並沒有幫助。
爲什麼這些元素沒有被更改爲可選或不可選?
工作撥弄演示的形式應該是如何工作的: http://jsfiddle.net/hodale/0c41465t/
而且,這裏是我用靈感演示: http://jsfiddle.net/hodale/aqpyykt0/
我會嘗試使用.rules()根據需要添加和刪除規則。你從jqeuryvalidation網站上取消了什麼?[這個demo](http://jsfiddle.net/hodale/aqpyykt0/)?這就是我使用addMethod()的想法。看起來他們的前提是創建和維護自定義規則,因爲用戶瀏覽了三個頁面表單。 – hodale 2015-03-30 21:44:28
@hodale,在您參考的演示中,'return!this.optional(element);'根據字段是否已經***需要返回一個布爾值......它不是「設置」它作爲「必需」。我也從來沒有仔細檢查演示,所以我不能評論他們爲什麼選擇這樣做。有很多方法可以做一個步驟形式。我更喜歡每一步使用不同的'
'......它使驗證更容易。 – Sparky 2015-03-30 22:35:22@hodale,請參閱:http://stackoverflow.com/a/20481497/594235 – Sparky 2015-03-30 22:37:49