2016-02-11 3 views
0

Я пытаюсь создать скрипт, чтобы проверить или снять флажок, чтобы он включал/отключал текстовое поле ввода цели. Мой код, если оператор, похоже, не работает правильно, иногда запуская оба ifs сразу, а иногда не стреляя вообще. Я выполнил отладку и попробовал множество вариантов, но это все равно не сработает. Вот что я имею, любая помощь очень ценится!Если элемент checbox/disable не работает должным образом

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"; 
    } 
    if (status = false) { 
     console.log("test2"); 
     obj.disabled = true; 
     obj.style.backgroundColor = "bfbfbf"; 
    } 
} 
+0

И вы уверены, что оператор присваивания должен использоваться в выражениях условий? Кроме того, вы должны также объявить «статус», поскольку глобальная переменная может привести к проблемам. – Teemu

ответ

0

Этот код не имеет надлежащего поведения по нескольким причинам.

Первая причина в том, что ваши операторы 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»)

+1

'obj.style.backgroundColor =" bfbfbf ";' также нуждается в хорошем значении '#' like '# bfbfbf' – eltonkamami

+0

. Я только посмотрел на контрольные заявления. Я также исправлю это для него, а –

+0

интересно, что цветная вещь работала просто отлично, но да логический оператор '==' исправил мою проблему вместе с вашими организационными настройками. Большое вам спасибо –