Javascript if子句无法正常工作

时间:2013-05-09 14:55:42

标签: javascript if-statement

我有以下Javascript / jQuery:

$('#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的最后一行,如果它不是给定的长度。

4 个答案:

答案 0 :(得分:2)

不应该是:

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

它应该是:

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

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

答案 1 :(得分:0)

这一行:

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

表示“如果长度不是8 长度不是4”。因此,例如,4不是8,因此条件为真(第二部分从未经过测试,因为JavaScript表达式被短路)。类似地,如果它是8,表达式的第一部分是假,但第二部分(8!= 4)是真的,因此表达式为真。

你可能想要:

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

&&表示“和。”

答案 2 :(得分:0)

让我们检查一下mylen4的情况。

mylen != 8 //true

mylen != 4 //false

true || false // true

您可能希望阻止mylen 阻止8成为mylen 4

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

答案 3 :(得分: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();
        }
    }
});
  • 它将所有变量声明为local( never 忘记var关键字!)
  • 它使用$(this)而不是重复$('#List')
  • 它使用e.preventDefault()而不是返回false
  • 它使用名为valid的变量来传达更清晰的含义
  • 它使用严格比较(===
  • 如果代码是表单有效性检查的一部分,请考虑将其放入submit事件处理程序而不是捕获Enter键。