【问题标题】:Compare select values and show alert if they match比较选择值并在匹配时显示警报
【发布时间】:2015-08-11 21:54:08
【问题描述】:

我有 4 个下拉菜单,您必须从中选择一个选项。

如果您多次选择相同的选项,我想要做的是显示警报。它的目的是保持比赛的分数,这样一个人就不能玩 2。

目前下拉菜单如下所示:

<select id="users_1" aria-labelledby="dropdownMenu1">
    <option>Select player</option>
    <?php foreach($users as $user) : ?>
    <option value="<?=$user['id_user']?>"><a href="#"><?=$user['nume']?></a></option>
    <?php endforeach; ?>
</select>

我在 JQuery 中尝试做的是:

$("#users_2").change(function() {
    var a=$(this).val("#users_1");
    var b=$(this).val("#users_2");
    if(a == b) {
        alert($(this).val());
    }
});

我也试着像这样比较它们:

$("#users_2").change(function() {
    if($(this).val() == $("#users_1").val()) {
        alert($(this).val());
    }
});

似乎没有一个工作,我不知道为什么。我已经检查过,实际值是从视图中获取的,但是 if 子句显然无法比较它们。

感谢您的帮助!非常感谢!

【问题讨论】:

  • 看起来不错。你能在小提琴中重现这个问题吗?
  • 第二个可以工作。
  • 当然可以!这是一个类似于我的情况的小提琴,没​​有任何反应,我不知道为什么。 jsfiddle.net/0c5xLxa9
  • @VladEugenNitu 您没有从左上角选择 jQuery 库。 jsfiddle.net/0c5xLxa9/1 检查它的工作原理。
  • @VladEugenNitu,您需要包含 jquery。它在这里工作jsfiddle.net/0c5xLxa9/2

标签: javascript jquery html


【解决方案1】:

获取你的价值观,不要设置它们

改变这个…

$("#users_2").change(function() {
    var a=$(this).val("#users_1");
    var b=$(this).val("#users_2");
    if(a == b) {
        alert($(this).val());
    }
});

……到这个……

$("#users_2").change(function() {
    var a = $("#users_1").val();
    var b = $(this).val(); // equivalent to $("#users_2").val()
    if(a === b) {          // Use strict comparison operator as a best practice
        alert(a + ' matches ' + b);
    }
});

让它充满活力

您可以通过侦听一组元素并使您的处理程序动态化,从而更进一步:

// Listen to set of all select elements.
$('select').on('change', function(e) {
  
  // Serialize form values.
  var vals = $('#select_player').serializeArray();
  
  // Convert to simple array of just values.
  vals = $.map(vals, function (val, i) {
    return val.value;
  });
  
  // Remove current selection from array…
  vals.splice(vals.indexOf($(this).val()), 1);
  
  // …then check to see if it's value was already there.
  if(vals.indexOf($(this).val()) !== -1) { // If value is found,
    
    // …reset current select element to default option,
    $(this).val('default');
    
    // …and alert user with a relevant message.
    alert('You cannot select this player more than once.');
  };
});
label {
  display: block;
  margin: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id="select_player" name="select_player">
  <label>Player 1:
    <select id="users_1" name="users_1">
      <option value="default" selected="selected" disabled>Select player</option>
      <option value="uid001">John Doe</option>
      <option value="uid002">Jane Doe</option>
      <option value="uid003">Jerome Smith</option>
      <option value="uid004">Janet O'Public</option>
    </select>
  </label>

  <label>Player 2:
    <select id="users_2" name="users_2">
      <option value="default" selected="selected" disabled>Select player</option>
      <option value="uid001">John Doe</option>
      <option value="uid002">Jane Doe</option>
      <option value="uid003">Jerome Smith</option>
      <option value="uid004">Janet O'Public</option>
    </select>
  </label>

  <label>Player 3:
    <select id="users_3" name="users_3">
      <option value="default" selected="selected" disabled>Select player</option>
      <option value="uid001">John Doe</option>
      <option value="uid002">Jane Doe</option>
      <option value="uid003">Jerome Smith</option>
      <option value="uid004">Janet O'Public</option>
    </select>
  </label>

  <label>Player 4:
    <select id="users_4" name="users_4">
      <option value="default" selected="selected" disabled>Select player</option>
      <option value="uid001">John Doe</option>
      <option value="uid002">Jane Doe</option>
      <option value="uid003">Jerome Smith</option>
      <option value="uid004">Janet O'Public</option>
    </select>
  </label>
</form>

【讨论】:

  • 非常感谢!正如您可能注意到的那样,我仍然是初学者,但我正在逐步掌握它。不幸的是,这仍然对我不起作用,尽管我看到它在 jsfiddle 上工作。这很奇怪。我忘了提到我正在使用 CodeIgniter 框架,但我怀疑这在这种情况下是否非常重要,因为其他脚本运行良好。
  • 实际上我设法让它工作。这是因为 PHP 错误,而不是 JQuery。非常感谢您的支持!
  • 您是否也知道我该怎么做,如果发生警报,​​产生警报的选择再次显示初始值(“选择播放器”)???
【解决方案2】:

我在所有下拉列表中使用了相同的类,然后只使用了一个事件处理程序。

$('.dropdown').on('change', function (event) {
    var selectedValue = $(event.currentTarget).val();
    var matchedDropdowns = $('.dropdown').filter(function (index) {
      return $(this).val() === selectedValue;
    });
    if (matchedDropdowns.length > 1) {
      alert("Alert Alert!")
    }
  })

在事件处理程序中,我可以获得选定的值,过滤与该值匹配的所有下拉列表,如果我获得超过 1 个下拉列表,我将只显示警报。

你可以在fiddle查看。

【讨论】:

  • 我喜欢使用filter 来简化逻辑。好电话。
猜你喜欢
  • 2015-07-28
  • 1970-01-01
  • 2022-07-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 2022-10-14
相关资源
最近更新 更多