2015-08-06 3 views
1

Ребята, что я делаю неправильно? На моем компьютере этот код: simple toggle показывает мне false === True, когда я вызываю функцию в первый раз. Почему это продолжается, когда статус ложный?Javascript кнопка переключения не работает, если условие

var status = false; 

    function toggleStatus() { 
    var message = "status:" + status; 
    if (status === false) { 
     message += "===FALSE"; 
     status=true; 
    } else { 
     message += "===TRUE"; 
     status=false; 
    } 
    alert(message); 
    } 
+0

Mhhh, кажется, работает для меня: https://jsfiddle.net/qbvfu9bj/2/ – Lund

+0

Да, я получаю статус: false === FALSE 'первый клик и' статус: true === TRUE 'второй клик. Возможно, у вас все еще есть старая версия, кэшированная или ваша машина или что-то еще. – Shilly

+0

, так что теперь я получаю это тоже на скрипке .. но на моем сервере все еще не работает с булевыми ... если я поменяю флаг на строку и сравню с тем, что она работает..на идеях? – Edwin

ответ

0

Это будет потому, что там уже window.status определен (который является строкой, и используется для текста в строке состояния браузера).

Поскольку вы не защищаете глобальное пространство имен от вашего кода, переменная статуса определяется как объект глобального объекта. Предположительно браузер будет топать по всему этому.

Это, однако, должны работать https://jsfiddle.net/72rf8g8p/:

(function(){ 

var status = false; 

    function toggleStatus() { 
    var message = "status:" + status; 
    if (status === false) { 
     message += "===FALSE"; 
     status=true; 
    } else { 
     message += "===TRUE"; 
     status=false; 
    } 
    alert(message); 
    } 

toggleStatus(); 

})(); 

Вы также можете просто изменить имя переменной к чему-то еще, например, как myStatus:

var myStatus= false; 

    function toggleStatus() { 
    var message = "myStatus:" + myStatus; 
    if (myStatus=== false) { 
     message += "===FALSE"; 
     myStatus=true; 
    } else { 
     message += "===TRUE"; 
     myStatus=false; 
    } 
    alert(message); 
    } 
+0

В этом была проблема! Благодарю. Кстати, ваш первый код не работал, но второй - в порядке. – Edwin

+0

Дан, любая идея почему? Я удалю его, я думаю, что второй ответ проще понять в любом случае. –

+0

Я не знаю .. Я пробовал и не работал. И да, второе лучше. Но экспликация из первой части также хороша. – Edwin

Смежные вопросы