1

我有这个代码来计算输入的数字

var tnnod=0;
function telephone(e) {
    if (tnnod<10) {
        var key;
        var keychar;

        if (window.event) {
            key = window.event.keyCode;
        }
        else if (e) {
            key = e.which;
        }
        else {
            return true;
        }
        keychar = String.fromCharCode(key);

if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) {
   return true;
}
else if ((("0123456789").indexOf(keychar) > -1)) {
    tnnod+=1;
   return true;
}
else if (keychar == "-") { 
  return true;
}
else
   return false;
}
    else
        return false
}

但是每次按下退格键并且删除的字符是数字而不是“-”时,我如何从计数器中删除 1

我尝试让 key == 8 做某事,但由于某种原因,按下退格键并没有真正返回任何东西

可能是什么问题?

4

4 回答 4

1

我认为为类似的事情计算击键是个坏主意。我们正在谈论输入到文本字段,对吗?如果用户从剪贴板粘贴一些字符串,你会怎么做?如果他用鼠标标记一些文本并删除它怎么办?用一个字符替换它?

我认为仅查看文本字段中的文本并(如有必要)进行一些摆弄以确保正确的语法会更有意义。让用户输入他想要的任何内容,如果您发现垃圾字符,您可以将文本替换为没有这些字符的文本。此时您也可以修剪该字段(没有前导或尾随空格)。此外,准确跟踪长度变得像询问从字段返回的字符串的长度一样容易。

于 2010-07-17T20:30:56.067 回答
1

您不必专门检测退格键。尝试这个:

var tn_count = 0;
function telephone(ev) {
  var el = document.getElementById("telephone_number");

  if(tn_count < 10) {
    var key, keychar;
    if(window.event) {
      key = window.event.keyCode;
    } else {
      key = ev.which;
    }

    keychar = String.fromCharCode(key);
  }

  if(!keychar.match(/\d|-/)) {  // only allow digits or "-"
    return false;
  }

  // clean up any non-digit chars that get in here somehow
  el.value = el.value.replace(/[A-Za-z]+/, '');
  tn_count = el.value.replace("-",'').length; // get the digit length
  return true;
}

这里的基本区别在于,不是每次按键都加 1,而是更新tn_count为字段中所有数字字符的总数。为了安全起见,您可能可以进行更多清理,但这应该可以帮助您入门。

于 2010-07-17T20:40:13.490 回答
0

你能只计算字符串的长度并使用该值吗?类似于以下内容:

function getLen(el) {
    return el.value.replace('-', '').length;
}

alert(getLen(document.getElementById('telephone_number')));
于 2010-07-17T20:50:56.700 回答
0

一些想法——

  1. 是否可以使用 3 个字段而不是 1 个字段?然后您可以稍后添加破折号。
  2. 如果你想使用你当前的方法,你可以保留一个已经输入的破折号的计数器。然后,在每次击键时,检查剩余的短划线数。如果它与之前的计数不同,您就知道他们已经删除了破折号。
  3. 我认为它需要更强大一些。如果他们在字符串中的一个奇怪的地方放一个破折号怎么办?
  4. 您还可以阻止用户输入所有非数字字符,并在每个分隔点插入破折号。因此,在输入时在 3 和 6 个数字后插入一个破折号。
于 2010-07-17T20:37:27.367 回答