jQuery keyup =而不是==

时间:2014-08-09 23:05:58

标签: javascript jquery

我使用jQuery在Javascript中编写了一个函数,它以我想要的方式工作。问题是,我做了一个拼写错误并使用赋值运算符而不是==或===。由于某种原因,赋值运算符起作用,而检查相等==则不然。下面的功能有效,但似乎不应该。我所指的部分是event.type ='keyup'。有什么想法吗?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class = "box" id = "box1">
<input class = "ti"  id = "t1" type="text"  placeholder= "Enter to do" >
</div>

<script>
$( ".ti" ).on( "keydown", function( event ) {
$( "#log" ).html( event.type + ": " +  event.which );
if (event.type = 'keyup' && event.which == '13') {
    alert('here');
}
});</script>

2 个答案:

答案 0 :(得分:6)

那是因为event.type = 'keyup'返回keyup而非空字符串是JavaScript中的真值。

编辑:我错过了&&运算符及其在表达式中的作用,可能是因为我专注于JavaScript中非空字符串的真实性质,这仍然与发生的事情有关。所以这个答案在你的情况下并不完全正确。由于Kay发布的答案是正确的,我不会更新此答案。

答案 1 :(得分:2)

在JavaScript中,逻辑AND(&&)的优先级高于赋值(=+=,...),即a = b && c被解析为{{1 }}

因此条件a = (b && c)被解析为event.type = 'keyup' && event.which == '13'。非空字符串在JavaScript中是真实的,因此该表达式可以简化为event.type = ('keyup' && (event.which == '13'))。请注意字符串&#34; keyup&#34;从表达中消失了。现在,赋值评估为赋值,即event.type = (event.which == '13')被覆盖为true或false,具体取决于event.type的值,此比较决定if-condition是否为真。