javascript - 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>
解决方案
原因是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
}
推荐阅读
- riscv - RISC-V:处理多个中断
- wpf - XamlParseException 将字符串转换为路由事件处理程序
- moodle - Moodle 访客访问手机
- json - Wiremock 响应取决于请求正文参数
- json - 我如何从 api 发出删除请求?- 颤动
- spring - 访问 Spring Boot 应用程序的 JConsole 上的特定 JMX 指标信息
- php - 如何为主表和辅助表编写 SQL 多插入查询
- hive - 为什么 Hive Map 键 (i16) 在按键搜索时不能向上转换?
- php - 从 3.3 更新到 3.4 时未定义的类常量“IGNORE_ON_UNINITIALIZED_REFERENCE”
- generics - 为什么我不能使输入参数通用