Этот код не имеет надлежащего поведения по нескольким причинам.
Первая причина в том, что ваши операторы if являются строчными, а не в форме if-else. Лучшей организации заключается в следующем:
function disable(elem) {
var obj = document.getElementById(elem);
status = obj.disabled;
console.log(status);
if (status == true) {
console.log("test");
obj.disabled = false;
obj.style.backgroundColor = "white";
} else {
console.log("test2");
obj.disabled = true;
obj.style.backgroundColor = "#bfbfbf";
}
}
Это означает, что даже если переменная вы проверяете изменения в то время как код в блоке выполняется, он не будет выполнять код в противоположном блоке независимо от его нового значения. Как и у вас, если значение должно было измениться, пока код в первом операторе if выполнялся, тогда оба блока управления могут выполняться.
Вторая причина, по которой она не ведет себя правильно, связана с неправильным синтаксисом в вашей инструкции if. В настоящее время вы используете оператор =
, который означает, что переменная установлена на то, что вы хотите проверить. Вы должны использовать либо проверки на равенство , либо ===
(последний является строгим), если вы хотите написать их таким образом. Еще лучший способ, чтобы пропустить этот оператор целиком просто проверить, если значение truthy, например, так:
function disable(elem) {
var obj = document.getElementById(elem);
status = obj.disabled;
console.log(status);
if (status) {
console.log("test");
obj.disabled = false;
obj.style.backgroundColor = "white";
} else {
console.log("test2");
obj.disabled = true;
obj.style.backgroundColor = "#bfbfbf";
}
}
Это должно дать вам ожидаемое поведение управления :) Как упоминалось выше, убедитесь, что вы форматировании значения (например, «#bfbfbf» не «bfbfbf»)
И вы уверены, что оператор присваивания должен использоваться в выражениях условий? Кроме того, вы должны также объявить «статус», поскольку глобальная переменная может привести к проблемам. – Teemu