【问题标题】:Extend JQuery Validation to a DIV [duplicate]将 JQuery 验证扩展到 DIV [重复]
【发布时间】:2014-12-11 20:06:38
【问题描述】:

我已经为此苦苦挣扎了一段时间,所以我想寻求帮助。

我有一个充满复选框的 div,我需要验证是否至少选中了一个复选框。

<div data-val="true" data-type="list-checkbox">
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>

有没有办法使用“jQuery.validator.addMethod”向特定的 DIV 添加验证?我认为如果我可以添加一个函数来验证,而不是在提交表单之前注入一个 javascript 来验证,那会更干净。

我尝试过这样的事情:

jQuery.validator.addMethod('requiredCheckboxList', function (value, element, params) {

    var div = $(element);
    //Some code to iterate through the div and check if at least one is checked
}, 'Wops!');

但验证器的默认行为似乎不检查标记为“data-val=true”的 div

谢谢!

【问题讨论】:

  • 我看过一些类似这样的帖子 (stackoverflow.com/questions/4936221/…),告诉我这是不可能的。但它是在将近 4 年前发布的。所以我认为有些事情可能已经改变了。
  • 关于您的问题,自that question 发布以来没有任何变化。

标签: jquery html jquery-validate


【解决方案1】:

使用此插件,有一些绝对要求没有解决方法...

  • 您只能验证inputtextareaselect 元素。时期。 editcontenteditable 属性现在在 1.15.0 版的某些元素上得到支持)
  • 您可以根据需要使用div 元素构造布局,但各种数据输入必须位于&lt;form&gt;&lt;/form&gt; 容器内。
  • 必须在每个数据输入上都有一个唯一的name 属性。 (一组复选框被视为单个数据输入。)

这是您无需创建任何自定义方法即可实现复选框验证的方式。

HTML

<form id="myform">
    <div data-type="list-checkbox">
        <input type="checkbox" name="foo" />
        <input type="checkbox" name="foo" />
        <input type="checkbox" name="foo" />
    </div>
    <input type="submit" />
</form>

jQuery

$(document).ready(function() {

    $('#myform').validate({
        rules: {
            foo: {  // 'name' of the field.
                required: true
            }
        }
    });

});

演示:http://jsfiddle.net/eLa8s5e4/


引用OP

“我认为如果我可以添加一个函数来验证,而不是在提交表单之前注入一个 javascript 来验证,那会更简洁。”

不确定这甚至意味着什么,“而不是注入 javascript”。不管你用 jQuery Validate 选择什么方法,你仍然需要 jQuery Validate 插件。

【讨论】:

  • 对不起我的英语不好。我的意思是我的 jquery 验证工作得很好。如果我只是添加一个函数来遍历提交时的复选框,而不是验证,我将不得不担心错误消息是如何出现的。我想告诉验证,使用它的当前消息显示配置有问题。
【解决方案2】:

在您的 HTML div 元素上添加一个 Id 属性。然后使用 find 函数检查是否选中了该 Div 上的任何复选框。

<div id = "test" data-val="true" data-type="list-checkbox">
  <input type="checkbox" />
  <input type="checkbox" />
  <input type="checkbox" />
</div>

jquery

 $("#test").find('input[type=checkbox]').each(function() {
   if( $(this).is(':checked')) {
   alert("what you want"); 
  }
});  

【讨论】:

  • 这与 jQuery Validate 插件有什么关系?
  • @Sparky :为什么要添加额外的插件。这样你可以很容易地找出是否有任何复选框被选中。
  • 我不是在争论 OP 是否需要插件。我指出您的回答几乎与 OP 的问题无关。他想知道如何使用 jQuery Validate 来实现某些东西......他没有要求这个插件的替代解决方案。
  • 如果我只是添加一个函数来遍历提交时的复选框,而不是验证,我不得不担心错误消息是如何出现的。我想告诉验证,使用它的当前消息显示配置有问题。
【解决方案3】:

保持简单

$('input[type="checkbox"]').change(function() {
    console.log(this.value); //check the value
    console.log(this.checked); //get the current state
}); 

【讨论】:

  • 这与 jQuery Validate 插件有什么关系?
  • 这太简单了!无需使用任何额外的插件
  • 除了OP询问如何使用这个插件:"Extend JQuery Validation to a DIV"
猜你喜欢
  • 2018-10-12
  • 1970-01-01
  • 2012-09-27
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多