2012-02-19 32 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