从所有下拉列表中获取选定值,但触发事件的下拉列表除外

时间:2016-11-18 11:26:36

标签: jquery

我想检查是否有任何其他选定值与当前选择匹配。因此,当.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());
    });
});

2 个答案:

答案 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}}元素使用了optionthis引用了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>