我有这个代码用于计算输入的位数
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做某事但是因为某种原因击中退格并没有真正返回任何内容
可能是什么问题?
答案 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)
一些想法 -
答案 3 :(得分:0)
你能算出字符串的长度并使用该值吗?如下所示:
function getLen(el) {
return el.value.replace('-', '').length;
}
alert(getLen(document.getElementById('telephone_number')));