Javascript if子句工作不正常

Javascript if子句工作不正常,javascript,if-statement,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 = line

我有以下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,它也会跳入代码块

我的错误在哪里

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

它不应该是:

if ((mylen != 8) || (mylen != 4)) {
应该是:

if ((mylen != 8) && (mylen != 4)) {
你的方式如果是8,它不是4,所以它通过了,或者如果是4,它不是8。您需要检查它是否不是这一行:

if ((mylen != 8) || (mylen != 4)) {
表示“如果长度不是8或长度不是4”。例如,4不是8,所以条件为true(第二部分从不测试,因为JavaScript表达式短路)。类似地,如果是8,则表达式的第一部分为false,但第二部分(8!=4)为true,因此表达式为true

您可能想要:

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

&&
表示“和”。

让我们检查一下
mylen
4
时的情况

mylen != 8 //true

mylen != 4 //false

true || false // true
您可能想要阻止
mylen
成为
8
阻止
mylen
成为
4

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

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
    的变量来传输含义
  • 它使用严格的比较(
    ==
  • 如果代码是表单有效性检查的一部分,请考虑将其放入<代码>提交事件处理程序中,而不是捕获Enter键。

您需要一个和,将
||
替换为
&
(mylen!=8)| |(mylen!=4)
对于
mylen
的每个可能值都是正确的。没问题,休息5分钟。别忘了给最上面的答案打分,需要我15分哈