2012-02-19 16 views
2

私は何かをしようとしていますが、私は愚かなバグで苦労しています。Javascript:2つの値が常に同じでないことを比較する

私のコードでわかるように、私はサーバー上にいくつかのチェックボックスを持っており、JavaScript関数を付けました。この関数は2つの値(現在の値と元の値)を取得します。 私の問題は、このファンクションが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やデバッガを使用します。私を信じて、あなたはそれ以降に警報に戻ることは決してありません。 – hugomg

+0

あなたが13歳の女の子でない限り、「u」は言葉ではありません。適切な英語を使用してください。 –

答えて

6

originalValueは常に文字列です。 valueはブール値です。したがって、それらは決して等しくはありませんが、あなたがそれらを印刷すると、それらは同じように見えます(それらは両方ともその時点で同じ文字列値に変換されるためです)。

これはさまざまな方法で修正できます。 1つの簡単な方法は、両方を文字列に変換することです。

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

ええ、私はこれを解決するために何をすべきでしょうか?編集者:ok im stupid私はちょうどtoString()を使用しました.. – Popokoko

+0

@Popokoko:私は私の答えを更新しました(あなたは私のために速すぎます!):-) – Cameron

+2

もしサーバーからチェックが来たら、カスタム属性が必要です。単に '.defaultChecked'プロパティを使用してください。これは '.checked'のようなブール値を返します。 'onclick =" checkChange(this.checked、this.defaultChecked) "' –

関連する問題