0

我有以下 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....

我的错误在哪里?

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

4

4 回答 4

2

它不应该是:

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

它应该是:

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

如果它是 8 ,它不是 4 ,所以它正在通过,或者如果它是 4 它不是 8 。你需要检查它是否不是

于 2013-05-09T14:58:08.377 回答
0

这一行:

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

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

你可能想要:

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

&&意思是“和”。

于 2013-05-09T14:58:27.503 回答
0

让我们来看看 when mylenis的情况4

mylen != 8 //true

mylen != 4 //false

true || false // true

您可能想要的是防止mylen出现8 防止mylen出现4

(mylen != 8) && (mylen != 4)
于 2013-05-09T14:59:19.553 回答
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来更清晰地传输含义
  • 它使用严格比较 ( ===)
  • 如果代码是表单有效性检查的一部分,请考虑将其放入submit事件处理程序中,而不是捕获 Enter 键。
于 2013-05-09T15:17:35.407 回答