Javascript js退格并计算有多少位
我有这个代码来计算输入的数字Javascript js退格并计算有多少位,javascript,onkeypress,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; }
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
}
var tnnod=0;
功能电话(e){
如果(tnnod-1)){
tnnod+=1;
返回true;
}
如果(keychar==“-”){
返回true;
}
其他的
返回false;
}
其他的
返回错误
}
但是,如何在每次命中退格并且删除的字符是数字而不是“-”时从计数器中删除1呢
我已经试着让key==8做一些事情,但是由于某种原因,点击backspace并不会返回任何东西
有什么问题吗?我认为计算这样的击键次数是个坏主意。我们说的是输入文本字段,对吗?如果用户从剪贴板粘贴一些字符串,您会怎么做?如果他用鼠标标记一些文本并删除它呢?用一个字符替换它 我认为只从文本字段中查看文本并(如果必要)进行一些修改以确保正确的语法会更有意义。让用户输入他想要的任何内容,如果您发现垃圾字符,您可以将文本替换为不包含这些字符的文本。此时还可以修剪字段(无前导空格或尾随空格)。此外,准确跟踪长度变得很容易,就像询问从字段返回的字符串的长度一样。一些想法-
您不必专门检测backspace按键。试试这个:
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;
}
var tn_count=0;
功能电话(ev){
var el=document.getElementById(“电话号码”);
如果(tn_计数<10){
var键,keychar;
if(window.event){
key=window.event.keyCode;
}否则{
key=ev.which;
}
keychar=String.fromCharCode(键);
}
如果(!keychar.match(/\d |-/){//只允许数字或“-”
返回false;
}
//清理任何以某种方式进入这里的非数字字符
el.value=el.value.替换(/[A-Za-z]+/,'');
tn_count=el.value.replace(“-”,“”).length;//获取数字长度
返回true;
}
这里的基本区别是,不是每次按键都加1,而是更新
tn_count
为字段中所有数字字符的总计数。为了安全起见,您可能还可以进行一些清理,但这应该可以让您开始了。您可以只计算字符串的长度并使用该值吗?如下所示:
function getLen(el) {
return el.value.replace('-', '').length;
}
alert(getLen(document.getElementById('telephone_number')));
我在提交时确实有一个正则表达式检查-我只是不想在不知道用户将在字段中使用多少破折号的情况下给出输入maxlength。所以我想计算10位数字,因为这里的电话可以是9或10,而thamplate可以是1,2或3 dashes1。这是不可能的。我想数一数破折号,但我只想知道字段是否超过了数字长度3。我有正则表达式提交任何方式4。但是,当他们将退格(删除)-我将不得不处理,以及明天我将尝试替换和长度-然后将能够与我的想法。。。谢谢,我用了一个小模型。。。el.value和tn_count行也应该在var el之后,因为它不会正确计数,在keychar.match行中,我添加了key==13,因此enter将提交表单great,很高兴您能够使用它!