2011-06-30 10 views
0

私はajaxを通していくつかのデータを取得しようとしています。データの1つは、デフォルトでチェックボックスをオンにするかどうかを決定します。返された変数isVisible1である場合は、その0がチェックされていない場合はチェックする必要があります。ここでは、コードです:Javascript equality weirdness

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

を後でコードで:

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

問題がisVisibleかどうかはchecked変数は常にtrueに評価され、1または0に設定されている、ということです。私は本当に問題が何であるか分かりません。おそらくisVisibleは文字列として扱われていますか?これをどうやって解決するのですか?

答えて

3

おそらくisVisibleは文字列です。 "0"はJavascriptの真実値です。代わりにこれを使用してください:

var checked = (isVisible==="1") ? true : false; 
+1

これはおそらく起こっていることです。私はtypeofを確認しようとしているのを見るためにtypeofをやろうとします。 –

0

Ajaxは非同期です。コールバックを使用する必要があります。あなたの質問を確認した後

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

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

は再び機能しない場合があります上記のようです。

これは、jQueryの1.6以上である場合、あなたがやるべきattr

prop対の問題になる可能性があります:

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

私がやっていることです。 'isVisible'の値が正しく設定されています。' isChecked'は 'isVisible'の値に関係なくtrueに評価されています。 –

+0

@ClickUpvote - どのバージョンのjQueryを使用していますか? – Neal

1

どの程度

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

0

"isVisible"は数字ではない文字列なので、テストに合格します。 parseint(isVisible、10)を試してみてください。

関連する問題