jQuery验证 - 同一类的NotEqual验证

时间:2015-11-30 05:40:28

标签: javascript jquery validation

我有几个下拉列表(类名为month_dropdown),下拉数不是常数。如何为它们实现NotEqual验证。我正在使用jQuery Validation插件。

这就是我写的 -

jQuery.validator.addMethod("notEqual", function(value, element, param) { return this.optional(element) || value != $(param).val(); }, "Please specify a different value");

jQuery.validator.addClassRules("month_dropdown",{
    notEqual: ".month_dropdown"
});

然而,这并不完美,即使我选择了不同的月份,它会弹出“请指定不同的值”的消息。

1 个答案:

答案 0 :(得分:1)

您需要遍历每个输入元素,然后检查其值,如。

在你的情况下,你总是检查第一个select元素对自己的值,因为$(param).val()将始终返回与选择器param匹配的第一个输入元素的值,所以当测试运行时对于第一个输入,那么它的值将与自身匹配

jQuery.validator.addMethod("notEqual", function(value, element, param) {
  return this.optional(element) || $(param).not(element).get().every(function(item) {
    return $(item).val() != value;
  });
}, "Please specify a different value");

jQuery.validator.addClassRules("month_dropdown", {
  notEqual: ".month_dropdown"
});

jQuery(function($) {
  var validator = $('#myform').validate({
    rules: {},
    messages: {}
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.js"></script>
<form id="myform" method="post" action="">
  <select class="month_dropdown" name="el[1]">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
  </select>
  <select class="month_dropdown" name="el[2]">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
  </select>
  <select class="month_dropdown" name="el[3]">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
  </select>
  <input type="submit" value="Save" />
</form>