我有几个下拉列表(类名为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"
});
然而,这并不完美,即使我选择了不同的月份,它会弹出“请指定不同的值”的消息。
答案 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>