簡體   English   中英

即使價值為假,“真實”評估仍在運行

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM