у меня есть этот код для подсчета сколько цифр, где вводится
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 из счетчика каждый раз, когда клавиша Backspace была hitted и символом, который был удален, было цифрой и не "-"
я попытался добраться, ключ == 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;
}
Основное отличие здесь в том, что вместо добавления 1 при каждом нажатии клавиши просто обновляется tn_count
, чтобы он был общим количеством всех цифровых символов в поле. Вы, вероятно, можете сделать еще немного очистки на всякий случай, но это должно помочь вам начать работу.
Я считаю, что считать нажатия клавиш для чего-то подобного - плохая идея. Мы говорим о вводе в текстовое поле, верно? Что вы будете делать, если пользователь вставит некоторую строку из буфера обмена? Что, если он использует мышь, чтобы отметить текст и удалить его? Заменить его одним символом?
Думаю, было бы разумнее просто посмотреть на текст из текстового поля и (при необходимости) немного поиграться, чтобы обеспечить правильный синтаксис. Позвольте пользователю вводить все, что он хочет, если вы обнаружите ненужные символы, вы можете просто заменить текст тем, в котором этих символов нет. Вы также можете обрезать поле в это время (без пробелов в начале и в конце). Кроме того, точное отслеживание длины становится таким же простым, как запрос длины строки, возвращаемой из поля.
Можно ли просто подсчитать длину строки и использовать это значение? Что-то вроде следующего:
function getLen(el) {
return el.value.replace('-', '').length;
}
alert(getLen(document.getElementById('telephone_number')));
Несколько мыслей -