клавиша Backspace js и подсчет, сколько цифр

у меня есть этот код для подсчета сколько цифр, где вводится

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 ничего действительно не возвращает по некоторым причинам

какова может быть проблема?

1
задан Y.G.J 17 July 2010 в 20:25
поделиться

4 ответа

Вам не нужно специально определять нажатие клавиши 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 , чтобы он был общим количеством всех цифровых символов в поле. Вы, вероятно, можете сделать еще немного очистки на всякий случай, но это должно помочь вам начать работу.

1
ответ дан 2 September 2019 в 22:58
поделиться

Я считаю, что считать нажатия клавиш для чего-то подобного - плохая идея. Мы говорим о вводе в текстовое поле, верно? Что вы будете делать, если пользователь вставит некоторую строку из буфера обмена? Что, если он использует мышь, чтобы отметить текст и удалить его? Заменить его одним символом?

Думаю, было бы разумнее просто посмотреть на текст из текстового поля и (при необходимости) немного поиграться, чтобы обеспечить правильный синтаксис. Позвольте пользователю вводить все, что он хочет, если вы обнаружите ненужные символы, вы можете просто заменить текст тем, в котором этих символов нет. Вы также можете обрезать поле в это время (без пробелов в начале и в конце). Кроме того, точное отслеживание длины становится таким же простым, как запрос длины строки, возвращаемой из поля.

1
ответ дан 2 September 2019 в 22:58
поделиться

Можно ли просто подсчитать длину строки и использовать это значение? Что-то вроде следующего:

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

alert(getLen(document.getElementById('telephone_number')));
0
ответ дан 2 September 2019 в 22:58
поделиться

Несколько мыслей -

  1. Можно ли использовать 3 поля вместо 1? Потом вы можете добавить тире позже.
  2. Если вы хотите использовать текущий метод, вы можете вести счетчик набранных тире. Затем при каждом нажатии клавиши проверяйте, сколько тире осталось. Если он отличается от предыдущего, значит, тире удалены.
  3. Я думаю, что он должен быть немного более надежным. Что, если они поставят тире в нечетном месте строки?
  4. Вы также можете запретить пользователю вводить все нечисловые символы и вставлять тире в каждую точку разделения. Итак, вставляйте тире после цифр 3 и 6 при вводе.
0
ответ дан 2 September 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: