Странность равенства JavaScript - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь получить некоторые данные через ajax.Одно из данных определяет, стоит ли устанавливать флажок по умолчанию.Если возвращаемая переменная isVisible равна 1, то она должна быть проверена, если ее 0, то она не должна быть проверена.Вот код:

$.getJSON(myUrl, function(result)
    {
        isVisible = result.isVisible;
        // snip...
    } );

Позже в коде:

var isChecked = (isVisible) ? true : false;
$("#visible").attr('checked', isChecked);

Проблема заключается в том, установлен ли isVisible на 1 или 0, checkedпеременная всегда оценивается как истина.Я действительно не уверен, в чем проблема.Возможно isVisible трактуется как строка ??Как мне решить эту проблему?

Ответы [ 4 ]

3 голосов
/ 30 июня 2011

Возможно isVisible - строка."0" является истинным значением в Javascript.Используйте это вместо:

var checked = (isVisible==="1") ? true : false;
1 голос
/ 30 июня 2011

Как насчет

isVisible = (result.isVisible == "1")

?

0 голосов
/ 30 июня 2011

Полагаю, "isVisible" - это строка, а не число, поэтому она прошла тест.Попробуйте parseint (isVisible, 10), дайте мне знать

0 голосов
/ 30 июня 2011

Ajax является асинхронным. вам нужно использовать обратные вызовы.

$.getJSON(myUrl, function(result)
{
    isVisible = result.isVisible;
    // snip...
    callback_setvis();
} );

function callback_setvis(){
     var ischecked = (isVisible) ? true : false;
     $("#visible").attr('checked', ischecked);
}

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

Это может быть проблема attr против prop

если вы работаете в jQuery 1.6 или выше, вам нужно сделать:

  $("#visible").prop('checked', ischecked);
...