[英]“true” evaluation running even when value is false
我有一個非常簡單的jquery,需要檢查從ajax調用返回的布爾值,並設置一個復選框來檢查它是否為真。
console.log("loc: " + r.location.defaultLocation);
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
}
這在打開模式窗體的onclick函數中運行 - 如果返回的位置信息指示這是默認位置,則應選中復選框。 我們在一個頁面上有5個 - 即用戶可以點擊的5個位置。
我r.location.defaultLocation
是,即使r.location.defaultLocation
返回false(根據console.log行),仍然會檢查該復選框。 我究竟做錯了什么?
對於那些堅持true / false必須是字符串而不是布爾值的人:
這是console.info(typeof(r.location.defaultLocation));
這是console.dir(r)
的結果,如果有幫助的話。 ( group
模糊,因為它是敏感的信息。)
發現了問題
顯然jquery記住在第一個標記為checked后檢查#loc-default
。 我在函數中添加了一個else,現在它可以工作:
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
}
else {
$('#loc-default').attr('checked', false);
}
我能看到發生這種情況的唯一方法是,如果defaultLocation實際上不是布爾值false,而是字符串“false”,其值為true。
確保r.location.defaultLocation
是一個布爾值。
嘗試if (!!r.location.defaultLocation) {}
強制該值為boolean類型。
我認為r.location.defaultLocation
是字符串 "false"
。 因此,如果您在其上使用console.log
,您將看到"false"
。 但"false" == true
是真的。
您可以使用typeof
檢查變量的類型。
console.log(typeof r.location.defaultLocation); // Log the current type of r.location.defaultLocation
console.log(typeof false); // Display boolean
console.log(typeof "false"); // Display string
由於您的代碼看起來是正確的,我會嘗試處理else語句並強制不選中復選框。
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
} else {
$('#loc-default').attr('checked',false);
}
首先,我會檢查r.location.defaultLocation
是什么
console.info(typeof(r.location.defaultLocation));
然后我會從那里去,但使用上面的代碼:
if (!!r.location.defaultLocation && typeof(r.location.defaultLocation)==="string") {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.