2012-02-19 55 views
2

我試圖做一些事情,但我正在努力與一個愚蠢的錯誤,希望你能幫助我。Javascript:比較兩個值總是不相等

正如你可以在我的代碼中看到的,我在服務器上有一個複選框,並附加了一個JavaScript函數。該函數獲取兩個值(當前值和原始值)。 我的問題是,當這個函數在if上觸發時,它總是會到達第一個子句,並且永遠不會到達else子句,這沒有任何意義。

當我用我的代碼幾警報,這是發生了什麼:

的情況下1:警報#1原:false電流:真警報#2true

的情況下2:警報#1原:false電流:假警報#2true

正如你所看到的,不管我在第二次警報中獲得真實。

希望我設法解釋我的問題。

<asp:CheckBox id="chkIsCustomQuantity" originalvalue="false" runat="server" onclick="checkChange(this.checked, this.attributes['originalvalue'].value" /> 

<script type="text/javascript" language="javascript"> 
    function checkChange(value, originalValue) { 

     //i added this for debugging purpose 
     alert('original: ' + originalValue + ' ' + 'current: ' + value); 
     alert(value != originalValue); 

     if (value != originalValue) { 
      // always happens 
     } 
     else { 
       // never happens 
     } 
    } 

</script> 
+1

使用console.log和/或您的調試器來檢查變量值。相信我,你永遠不會希望在那之後回到alert()。 – hugomg 2012-02-19 21:37:38

+0

除非你是一個13歲的女孩,否則「u」不是一個單詞。請使用適當的英語。 – 2012-02-19 21:37:45

回答

6

originalValue總是一個字符串。 value是一個布爾值。所以,它們永遠不會相等,但是當你將它們打印出來時,它們看起來是相同的(因爲它們在那一點上都被轉換爲相同的字符串值)。

你可以用各種方法解決這個問題。一種簡單的方法是先將兩者轉換爲字符串:

if (String(value) != String(originalValue)) 
+0

嗯所以我應該怎麼做才能解決這個問題?編輯:好吧我愚蠢我只是用toString().. – Popokoko 2012-02-19 21:38:12

+0

@Popokoko:我已經更新了我的答案(你對我來說太快了!):-) – Cameron 2012-02-19 21:40:36

+2

如果他們來自服務器檢查,你不應該' t需要一個自定義屬性。只需使用'.defaultChecked'屬性即可。這會給你一個布爾值,就像'.checked'一樣。 'onclick =「checkChange(this.checked,this.defaultChecked)」' – 2012-02-19 21:43:34