JQuery validator.addMethod 使用类名验证复选框

标签 jquery jquery-validate

我在使用 jQuery validator.addMethod 根据类名而不是名称来验证复选框时遇到问题。

看一下这个并告诉我为什么该脚本在放置在 html 内的脚本标记内时不起作用。

代码在这里:http://jsbin.com/ecozih/2

如果将脚本移至 JS bin 上的 JavaScript 窗口,它就会起作用。

如果有更简单的方法,请告诉我。一个例子将不胜感激。

<html>
  <head>
<script src="hxxp://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="hxxp://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>

  </head>
<body>
<script>
$.validator.addMethod('interests', function (value) {
return $('.interests:checked').size() > 0; }, 'Pick one or more');
var checkboxes = $('.interests');
var checkbox_names = $.map(checkboxes, function(e,i) { return $(e).attr("name")}).join(" ");
$("#subscribeForm").validate({
    groups: { checks: checkbox_names },
    errorPlacement: function(error, element) {
             if (element.attr("type") == "checkbox")
               error.insertAfter(checkboxes.last());
             else
               error.insertAfter(element);
}
});
</script>
<form name="subscribeForm" id="subscribeForm" method="post">
<input type="checkbox" class="interests" value="1" name="group[1357][1]" ><label>Bananas</label>
<input type="checkbox" class="interests" value="2" name="group[1357][2]"><label>Oranges</label>
<input type="checkbox" class="interests" value="4" name="group[1357][4]"><label>Apples</label><br />
<label for="checks" generated="true" class="error" style=""></label><br />
<input type="submit" />
</form>
  </body>

谢谢

最佳答案

您忘记将 jQuery 代码包装在 document.ready 中。换句话说,您的 jQuery 试图在元素被构造之前选择元素。 document.ready 解决了这个问题。由于调用代码时 form 还不存在,因此 document.ready 仅在 HTML DOM 准备就绪时才会触发。

jsFiddle 演示:http://jsfiddle.net/TCHYJ/

和你的 jsBin: http://jsbin.com/ecozih/4/edit

引用:“如果将脚本移至 JS bin 上的 JavaScript 窗口,它就会起作用。”

这是因为,无论您是否使用 document.ready,jsBin 和 jsFiddle 的 JavaScript Pane 内的代码都会等待 DOM 加载,然后才会被触发。

http://jsfiddle.net/TCHYJ/1/

http://jsbin.com/ecozih/6/edit

<script>
    $(document).ready(function() {

        $.validator.addMethod('interests', function(value) {
            return $('.interests:checked').size() > 0;
        }, 'Pick one or more');
        var checkboxes = $('.interests');
        var checkbox_names = $.map(checkboxes, function(e, i) {
            return $(e).attr("name")
        }).join(" ");

        $("#subscribeForm").validate({
            groups: {
                checks: checkbox_names
            },
            errorPlacement: function(error, element) {
                if (element.attr("type") == "checkbox") error.insertAfter(checkboxes.last());
                else error.insertAfter(element);
            }
        });

    });​
</script>

关于JQuery validator.addMethod 使用类名验证复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380479/

相关文章:

php - jQuery 验证远程方法使用来检查用户名是否已存在

使用不同输入表单(输入和文本区域)时的 JQuery Validator 问题

jquery - 在 jQuery 中生成元素

jquery - 在 Ajax.BeginForm 中传递 UpdateTargetId 而不是替换目标

javascript - HTML 输入自动填充占位符

javascript - 如何捕获多张图片的点击?

javascript - JS appendChild() 到 <form> 中的 <div>

java - 验证失败时阻止操作

javascript - 结合 MicrosoftMvcJQueryValidation 和 Ajax 提交

javascript - 如何将 jQuery Validation 插件与元数据、jQuery Forms 和 xVal 一起使用?