【发布时间】:2020-03-31 17:39:57
【问题描述】:
可以运行底部的代码sn-p:附件正确发生N次,但实际方法只执行一次。此问题发生在动态生成的表单中。
我在 jQuery Validator 中有以下自定义规则,适用于我表单上的所有单选按钮。
// Destroy and re-initialize Form Validator (dynamically repopulated form)
var validator = $('#activityQuestionsForm').validate();
validator.destroy();
$(form).validate({ .. }); // with configuration
// Define custom validation method
$.validator.addMethod('childAnswersVisible', function(value, element) {
// .. Custom function goes here.. returns true/false
});
...
// Attach custom validation method to all radiobuttons
if ($(element).is("#activityQuestionsForm input[type=radio]")) {
$(element).rules("add", {childAnswersVisible : true});
}
我有 3 个单选按钮。创建表单后,我看到rules("add") 附件正确执行了 3 次。所以现在所有 3 个单选按钮都附加了自定义验证。
我在addMethod 的自定义验证定义中也有一个断点(见上文,我有.. Custom function goes here.. returns true/false),并且在提交表单时,我看到该块只执行一次 - - 对于第一个单选按钮。有谁知道为什么?提交表单时,我希望该断点被击中 3 次,每个单选按钮一个,以便为每个单选按钮做出决定。
// Construct a dynamic form with 3 radiobuttons
var html = '<form id="activityQuestionsForm">' +
' <input type="radio" name="choices" id="62"> 62 <br> ' +
' <input type="radio" name="choices" id="63"> 63 <br> ' +
' <input type="radio" name="choices" id="64"> 64 <br> ' +
'<input type="submit">' +
'</form>';
$(html).appendTo('body');
$.validator.addMethod('childAnswersVisible', function(value, element) {
alert('Running custom method');
return true;
});
$('#activityQuestionsForm').validate();
$("#activityQuestionsForm input[type=radio]").each(function(index) {
$(this).rules("add", {childAnswersVisible : true});
alert('Attached custom method for: ' + $(this).attr('id'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.15.0/jquery.validate.min.js"></script>
【问题讨论】:
-
请构建一个工作演示或至少为此提供足够的代码。我没有看到任何标记,并且您遗漏了所有功能和配置。怎么会有人知道你做错了什么或测试一下?
-
Sparky,附加了一个新的 sn-p。你可以运行它。如果您注意到,规则被正确附加了 N 次,但实际的验证方法只运行一次。那就是问题所在。您可以滚动浏览 3 个警报,然后仅滚动 1 个警报。
-
jQuery Validate 仅使用
name属性进行验证,而不是id。由于所有三个单选按钮都具有相同的name,因此这组按钮被视为一个输入。因此,一切都按预期工作,并且您已将规则应用于相同的输入 3 次。如果它们是唯一的并且您可以选择其中的任何一个/全部,那么它们将需要不同的names。 jsfiddle.net/fo1jbu0v -
示例:一个输入:
name="gender"... 单选按钮选择:男性、女性、其他。 -
原始答案已针对您的编辑进行了更新。