2013-05-09 210 views
0

我有以下的Javascript/jQuery的:的Javascript if语句工作不正常

$('#List').keypress(function (e) { 
    if (e.which == 13) { 
    var lines = $('#List').val().split('\n'); 
    mylast = lines[lines.length - 1]; 
    mylen = mylast.length; 
    if ((mylen != 8) || (mylen != 4)) { 
     lines = lines.slice(lines.length-1); 
     $('#List').val(lines.join("\n")); 
     alert(mylen); 
     return false; 
    } 
    return true; 
    } 
}); 

但它跳进如果即使长度在4或8 ....

在哪里代码块我的错误?

我想删除textarea的最后一行,如果它不是给定的长度。

+3

您需要一个AND,用'&&'替换'||'。 – 2013-05-09 14:56:58

+0

'(mylen!= 8)|| (mylen!= 4)“对于mylen的每一个可以想象的价值都是正确的。 – Tomalak 2013-05-09 14:58:39

回答

2

它不应该是:

if ((mylen != 8) || (mylen != 4)) { 

它应该是:

if ((mylen != 8) && (mylen != 4)) { 

你的方式,如果是8,这不是4所以它是通过或者如果它是4天渐渐不8.你需要检查它也不

+0

大声笑..该死的..需要更多的咖啡......谢谢... – 2013-05-09 14:59:20

+0

哈没问题,还需要5分钟休息。不要忘记标记顶部的答案,需要我的15分ha – 2013-05-09 15:01:17

+0

将在8分钟内标出:D – 2013-05-09 15:02:18

0

这条线:

if ((mylen != 8) || (mylen != 4)) { 

的意思是“如果长度不是8 长度不是4”。例如,4不是8,所以条件是真的(第二部分从未测试,因为JavaScript表达式是短路的)。同样,如果它是8,表达式的第一部分是假的,但第二部分(8!= 4)是真的,所以表达式是真的。

你可能想:

if ((mylen != 8) && (mylen != 4)) { 

&&手段 “和”。

0

让我们来看看mylen4的情况。

mylen != 8 //true 

mylen != 4 //false 

true || false // true 

你可能想要的是防止mylen8防止mylen4

(mylen != 8) && (mylen != 4) 
0

FWIW,这里有一个更好的版本的代码:

$('#List').keypress(function (e) { 
    var lines, last, valid; 

    if (e.which === 13) { 
     lines = $(this).val().split('\n'); 
     last = lines.pop(); 
     valid = last.length === 4 || last.length === 8; 

     if (!valid) { 
      $(this).val(lines.join("\n")); 
      e.preventDefault(); 
     } 
    } 
}); 
  • 它声明的所有变量为本地(从未忘记var关键字!)
  • 它使用的$(this)而不是重复$('#List')
  • 它使用e.preventDefault(),而不是返回false
  • 它使用了一个名为valid运输变量意思更清晰
  • 它使用严格比较(===
  • 如果代码是表单有效性检查的一部分,请考虑pu将其分配到事件处理程序中,而不是捕获Enter键。