Проблема в том, что вы выполняете действие внутри l oop, где вы проходите l oop через все элементы в words
объекте.
В случае с "соединенными штатами" это первый элемент в списке, поэтому код переходит в блок «yes matched», а затем прекращает цикл из-за break
. Но во втором и третьем случаях у него есть шанс go в else
на первом l oop, потому что он не совпадает. И там вы установите красный фон. Но вы никогда не меняете фон снова на более поздних циклах.
Лучшим решением было бы дождаться окончания l oop, прежде чем предпринимать какие-либо видимые действия. Вместо этого просто установите флаг внутри l oop, который вы позже используете, чтобы решить, какое действие предпринять.
Демо:
const words = {
"united states": "us",
"united kingdoms": "uk",
"united nations": "un",
};
function check(val) {
var match = false;
for (word in words) {
if (val == word) {
match = true;
break;
}
}
if (match == true) {
document.getElementById('debug').innerHTML = "Yes, Matched";
} 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>