我想检查是否有任何其他选定值与当前选择匹配。因此,当.payment-method
更改时,我会获取值并检查其他.payment-method
的值。我想排除触发更改的下拉列表。 .not(this)
无效。
$(document).on('change', '.payment-method', function() {
var thisVal = $(this).val();
console.log("this value" + thisVal);
$(".payment-method option:selected").not(this).each(function () {
console.log($(this).val());
});
});
答案 0 :(得分:1)
要检查重写值,您可以对其进行过滤,例如:
$(document).on('change', '.payment-method', function() {
var thisVal = $(this).val();
console.log("this value" + thisVal);
var anyDupeVal = !!$(".payment-method").not(this).filter(function() {
return this.value === thisVal
}).length;
console.log(anyDupeVal); // true or false
});
如果你想要所有其他值作为你的标题建议它,那么你可以映射它以获得一组值:
var otherValues = $(".payment-method").not(this).map(function() {
return this.value
}).get();
但是imho,结果并不是很清楚你期待什么。
答案 1 :(得分:0)
问题是因为您对使用not()
的{{1}}元素使用了option
,this
引用了select
,因此它始终为false。要解决此问题,请在包含not()
元素的选择器上调用.payment-method
,然后使用find()
获取所选的选项,如下所示:
$(document).on('change', '.payment-method', function() {
$('.payment-method').not(this).find('option:selected').each(function() {
console.log($(this).val());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<select class="payment-method">
<option value="foo">Foo</option>
<option value="bar">Bar</option>
<option value="fizz">Fizz</option>
<option value="buzz">Buzz</option>
</select>
<select class="payment-method">
<option value="foo">Foo</option>
<option value="bar">Bar</option>
<option value="fizz">Fizz</option>
<option value="buzz">Buzz</option>
</select>
<select class="payment-method">
<option value="foo">Foo</option>
<option value="bar">Bar</option>
<option value="fizz">Fizz</option>
<option value="buzz">Buzz</option>
</select>