首页 > 解决方案 > ELSE 语句中的一个函数也和 IF 语句一起执行,如何防止呢?

问题描述

我试图仅在两个值之间匹配时才执行此代码,并且我使用 if/else 语句,并且我在“ELSE”语句中放置了另一个函数以将背景颜色更改为红色,但即使它也被执行条件不满足...当我单击第一个按钮“美国按钮”时,它执行得很好,但是当单击其他两个按钮中的任何一个时,它会执行两个语句,即写“是,匹配”并更改背景颜色虽然它在ELSE 语句中.. 我怎么能阻止这个??? 这是我的代码

const words = {
  "united states": "us",
  "united kingdoms": "uk",
  "united nations": "un",
};

function check(val) {

  for (word in words) {
    if (val == word) {
      document.getElementById('debug').innerHTML = "Yes, Matched";
      break;
    } else {
      document.getElementById('debug').innerHTML = "No Match";
      bgRed();

    }
  }
};

function bgRed() {
  for (i = 0; i < 3; i++) {
    document.getElementsByTagName('input')[i].style.background = 'red';
  }
}
* {
  text-align: center
}

input {
  margin: 30px;
}
<input type="button" value="united states" onclick="check(this.value)"><br>
<input type="button" value="united kingdoms" onclick="check(this.value)"><br>
<input type="button" value="united nations" onclick="check(this.value)">
<div id="debug"></div>

标签: javascriptif-statement

解决方案


原因是for (word in words)循环,假设您正在尝试匹配words列表中的每个选择。

只有美国没有变红的原因是循环在进入 else 语句之前就中断了。

你想要的可能是一个

var found = false;
for (word in words) {
    if (val == word) {
      document.getElementById('debug').innerHTML = "Yes, Matched";
      found = true;
      break;
    }
}
if found == true {
 // do something
} else {
 // do something else
}


推荐阅读