js退格并计算多少位数

时间:2010-07-17 20:25:51

标签: javascript onkeypress

我有这个代码用于计算输入的位数

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,并且删除的字符是数字而不是“ - ”

我试过让键== 8做某事但是因为某种原因击中退格并没有真正返回任何内容

可能是什么问题?

4 个答案:

答案 0 :(得分:1)

我认为计算这样的键击是个坏主意。我们正在谈论输入文本字段,对吧?如果用户从剪贴板粘贴了一些字符串,您会怎么做?如果他使用鼠标标记某些文本并删除它会怎么样?用一个字符替换它?

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

答案 1 :(得分: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更新为字段中所有数字字符的总数。为了安全起见,你可以做更多的清理,但这应该让你开始。

答案 2 :(得分:0)

一些想法 -

  1. 是否可以使用3个字段而不是1个字段?然后你可以稍后添加破折号。
  2. 如果要使用当前方法,可以保留已键入的破折号的计数器。然后,在每个按键行程中,检查剩余的破折号数。如果它与之前的计数不同,则表示他们已删除破折号。
  3. 我认为它需要更强大一些。如果他们在字符串中的一个奇怪的位置放一个短划线怎么办?
  4. 您还可以阻止用户输入所有非数字字符,并在每个分隔点插入破折号。因此,在输入时输入3和6个数字后的短划线。

答案 3 :(得分:0)

你能算出字符串的长度并使用该值吗?如下所示:

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

alert(getLen(document.getElementById('telephone_number')));