【问题标题】:how to compare multiple select options in javascript如何比较javascript中的多个选择选项
【发布时间】:2019-08-05 12:37:56
【问题描述】:

我有多个选择选项,我需要在每个选项之间进行比较。我怎么能在 jquery/javascript 中做到这一点?

在下面的示例中,我尝试选择单个选项,例如“temp”并且它有效。但是当我尝试同时选择“temp”和“level”时出现了两个弹出警报,这不是所需的输出。

for (var i = 0; i < sensor.length; i++) {
  var isSelected = sensor[i];
}


if (process1 === "P1" && isSelected === "temp") {
  alert("temp")
}
if (process1 === "P1" && isSelected === "hum") {
  alert("hum")
}
if (process1 === "P1" && isSelected === "pre") {
  alert("pre")
}
if (process1 === "P1" && isSelected === "level") {
  alert("level")
}
if (process1 == "P1" && isSelected == "temp" || isSelected == "level") {
  alert("level 14")
}

});
<div class="form-group col-md-6">
  <select class="selectpicker" id="sensor" name="sensor[]" multiple>
    <option selected>None</option>
    <option value="P1All">All</option>
    <option value="temp">Temperature</option>
    <option value="hum">Humidity</option>
    <option value="pre">Presure</option>
    <option value="level">Level</option>
  </select>

我期望的输出是:如果我选择“temp”和“level”,我应该得到一个仅显示“level 14”的弹出窗口。目前有两个弹出窗口,分别是“level”和“level 14”

【问题讨论】:

  • 请添加完整功能。没有损坏的代码。
  • 由于(无意义的)for 循环,isSelected 将始终是sensor 的最后一个元素。因为那是level 我猜,最后两个 if 块将签出。
  • 你在什么事件下运行 JS?这个问题似乎缺少一些重要的逻辑

标签: javascript jquery html multiple-select


【解决方案1】:

您按顺序使用了许多 if 语句。所以当process1 === "P1" &amp;&amp; isSelected === "level"process1 == "P1" &amp;&amp; isSelected == "temp" || isSelected == "level"这两个条件都为真时,都会抛出一个警报。

如果您希望其中只有一个运行,请改用 else if 语句。

例子:

if (process1 === "P1" && isSelected === "temp") {
  alert("temp")

} else if (process1 === "P1" && isSelected === "hum") {
  alert("hum")

} else if (process1 === "P1" && isSelected === "pre") {
  alert("pre")

} else if (process1 === "P1" && isSelected === "level") {
  alert("level")

} else if (process1 == "P1" && isSelected == "temp" || isSelected == "level") {
  alert("level 14")
}

有关 JavaScript 中条件语句的更多信息,请访问here

【讨论】:

  • isSelected 永远只有一个值;添加else 并不能解决选择多个值的问题。
  • @Ahmed 该评论是针对答案的。添加elses 对您没有帮助,所以当然它仍然不起作用:)。
【解决方案2】:

解决方案:

您始终将最后一个数组元素存储在 isSelected 中。这可能是只收到 levellevel 14 警报消息的原因。

for (var i = 0; i < sensor.length; i++) {
  var isSelected = sensor[i];
  if (process1 === "P1" && isSelected === "temp") alert("temp")
  if (process1 === "P1" && isSelected === "hum") alert("hum")
  if (process1 === "P1" && isSelected === "pre") alert("pre")
  if (process1 === "P1" && isSelected === "level") alert("level")
  if (process1 == "P1" && isSelected == "temp" || isSelected == "level") alert("level 14")
}

【讨论】:

  • isSelected 在每次迭代中都只会是一个值。 OP 现在仍会收到三个警报,而不是两个。
【解决方案3】:

如果看到您启用了 jquery。

只需执行此操作即可获取选定的值:

var values = $('#sensor').val();
// values is now an array of string

然后你可以这样做:

if (process1 === "P1") {

  if (values.indexOf("temp") > -1 && values.indexOf("level") > -1) {
    alert("level 14");
  }
  else if (values.indexOf("temp") > -1) {
    alert("temp");
  }
  else if (values.indexOf("hum") > -1) {
    alert("hum");
  }
  else if (values.indexOf("pre") > -1) {
    alert("pre");
  }
  else if (values.indexOf("level") > -1) {
    alert("level");
  }
  else {
    alert('anything else');
  }
}

如果达到第一个 if(同时具有两个条件),则另一个 if 将被忽略。

必须进行一些调整,但你明白了。

【讨论】:

  • 我刚刚编辑了代码,可能你拿错了版本^^请再试一次
  • 谢谢,这个例子能以某种方式工作。但是当我选择两个不在条件中但仍显示警报的选项时怎么样。喜欢选择温度 && 嗡嗡声。假设什么都不显示。无论如何感谢您的帮助
  • @Ahmed 我刚刚编辑了我的代码以添加else 子句以捕获与上述任何 if 语句不匹配的所有情况。它将显示一个alert,其中包含“其他任何内容”作为文本。
  • 嗨,兄弟。我还有另一个问题,如果我想添加或子句,听起来它只是捕获一个值,只是它没有捕获其他值。例如:
  • if(process1 === "P1" && process2 === "P2"){ if(values.indexOf("temp") > -1 && values.indexOf("hum") > -1 && values1.indexOf("temp1") > -1 || values1.indexOf("hum1") > -1 || values1.indexOf("pre1") > -1 || values1.indexOf("elect") > -1){ alert("temphum"); } else if(values.indexOf("temp") > -1 && values.indexOf("pre") > -1 && values1.indexOf("temp1") > -1 || values1.indexOf("hum1") > -1 || values1.indexOf("pre1") > -1 || values1.indexOf("elect") > -1){ alert("temppre") }
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 2012-09-12
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多