查看帖子,如https://stackoverflow.com/a/15453130/1032531,我看我如何驗證已選框的數量。使用jQuery驗證器驗證單個複選框
取而代之,我希望根據其他條件驗證複選框,例如是否填寫了其他輸入。
編輯。背景:輸入是用戶的家庭,工作和手機。複選框是「在家打電話給我」,「打電話給我工作」和「致電我的手機」。它們是複選框而不是單選框,因此,如果用戶選中多個複選框,用戶將得到多個響應。
我把以下內容放在一起,但是,看起來jQuery Validator只會查看給定名稱的第一個元素。我可能會更改名稱是唯一的,而不是使用[]
,但是,我希望將元素作爲數組發佈到服務器。
這是如何實現的?
<p>one:
<input id="one" type="text" value="foo" />
</p>
<p>two:
<input id="two" type="text" />
</p>
<p>three:
<input id="three" type="text" value="bar" />
</p>
<hr>
<form id="myform">
<p>
<input type="checkbox" name="test[]" value="1" checked data-check="one" />One</p>
<p>
<input type="checkbox" name="test[]" value="2" checked data-check="two" />Two</p>
<p>
<input type="checkbox" name="test[]" value="3" checked data-check="three" />Three</p>
<p>
<input type="submit" />
</p>
</form>
(function() {
$.validator.addMethod("checkboxes", function(value, element, params) {
console.log(this, value, element, params);
console.log($(element).data('check'), $('#' + $(element).data('check')).val());
console.log(!$('#one').val(),!$('#two').val(),!$('#three').val());
var error = false;
if (value == 1 && !$('#one').val()) {
error = true;
}
else if (value == 2 && !$('#two').val()) {
error = true;
}
else if (value == 3 && !$('#three').val()) {
error = true;
}
console.log(error)
if (error) {
$(element).data('error', value);
return false;
} else {
return true;
}
},
function(params, element) {
return $.validator.format('This checkbox is not allowed since ' + $(element).data('error') + ' is empty.')
})
})();
$(document).ready(function() {
$('#myform').validate({
rules: {
'test[]': {
checkboxes: true
}
},
submitHandler: function(form) {
alert('valid form submitted');
return false;
}
});
});
謝謝Sparky的,其實我的想法一樣,用的名稱,如'測試[N]'但是,我計劃從零開始而不是一開始。但是,沒有真正考慮過這些影響。另一個想法是使用插件,使用第一個元素來獲取名稱,然後使用JavaScript獲取該名稱的所有元素,然後從那裏開始。然而,我的關注是保持消息始終不變地顯示給定名稱的第一個元素。 – user1032531
@ user1032531,我不知道你在問什麼。我可以告訴你的是,插件是如何設計的,並且沒有解決唯一'name'需求的解決方法。 – Sparky