JS Backspace и подсчет, сколько цифр - PullRequest
1 голос
/ 18 июля 2010

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

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 и удаляемый символ был цифрой, а не "-"

Я пытался заставить ключ == 8 что-то сделать, но нажатие на клавишу возврата не дает ничего по какой-то причине

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

Ответы [ 4 ]

1 голос
/ 18 июля 2010

Вам не нужно специально определять нажатие клавиши 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 голос
/ 18 июля 2010

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

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

0 голосов
/ 18 июля 2010

Не могли бы вы просто посчитать длину строки и использовать это значение? Примерно так:

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

alert(getLen(document.getElementById('telephone_number')));
0 голосов
/ 18 июля 2010

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

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