表单数组中重复项的JQuery验证

4Je*_*ean 0 arrays validation jquery

我想显示重复或不唯一的值的错误,但我的表单采用输入数组,我已经在jsfiddle检查了这些问题,name = "week[]"失败但name = "week"工作正常

  1. 问题1

  2. 问题2

  3. 问题3

  4. 问题4

表单HTML

<html>
    <head></head>
    <body>
        <form name = "myForm" id = "myForm" class ="validate">
            <input type="number" name="week[]" id="week1"/>
            <input type="number" name="week[]" id="week2"/>
            <input type="number" name="week[]" id="week3"/>
            <input type="number" name="week[]" id="week4"/>
        </form>
        <script src="assets/js/jquery.validate.min.js"></script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我试过这个

<script type="text/javascript">
    jQuery.validator.addMethod("unique", function(value, element, params) {
        var prefix = params;
        var selector = jQuery.validator.format("[name!='{0}'][unique='{1}']", element.name, prefix);
        var matches = new Array();
        $(selector).each(function(index, item) {
            if (value == $(item).val()) {
                matches.push(item);
            }
        });

        return matches.length == 0;
    }, "Value is not unique.");

    jQuery.validator.classRuleSettings.unique = {
        unique: true
    };
</script>
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

Nen*_*car 5

您可以创建输入值数组,map()然后检查数组中的重复项并显示/隐藏错误消息

$('#myForm input').on('change', function() {

  //Create array of input values
  var ar = $('#myForm input').map(function() {
    if ($(this).val() != '') return $(this).val()
  }).get();

  //Create array of duplicates if there are any
  var unique = ar.filter(function(item, pos) {
    return ar.indexOf(item) != pos;
  });

  //show/hide error msg
  (unique.length != 0) ? $('.error').text('duplicate'): $('.error').text('');
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name="myForm" id="myForm">
  <input type="number" name="week[]" id="week1">
  <input type="number" name="week[]" id="week2">
  <input type="number" name="week[]" id="week3">
  <input type="number" name="week[]" id="week4">
</form>
<div class="error"></div>
Run Code Online (Sandbox Code Playgroud)