Я хочу, чтобы счетчик правильно отображал числа - PullRequest
0 голосов
/ 20 ноября 2011

У меня 2 вопроса:

Вопрос 1: У меня есть функция счетчика, и у меня есть одна небольшая проблема с ней. Если пользователь, например, набирает 00000009 или 00021 в счетчике, если пользователь щелкает от счетчика, он все равно будет отображать 00000009 или 00021 в счетчике. Что я хочу, так это то, что если что-то подобное происходит, то, что я хочу, это чтобы пользователь щелкал мышью, и я хотел, чтобы счетчик отображал его как 9 или 21, а не 00000009 или 00021. Хотя я не знаю, как это сделать , Кто-нибудь знает как это побороть:

Вопрос 2: Если я использовал клавишу Backspace для удаления числа из счетчика, и в нем остался пустой счетчик, что нужно сделать, чтобы, если я щелкну вдали от счетчика, снова появилось последнее число в счетчике в вертушке?

Моя основная функция счетчика:

    function Spinner(elem,min, max){
                this.elem = elem;
                this.elem.value = min;
                this.min = min;
                this.max = max;
                this.timer;
                this.speed = 150; //milliseconds between scroll values
                var selfO = this;

                this.elem.onkeyup = function(){
                    var regex = /^[0-9]*$/;
                    if(!regex.test(selfO.elem.value)){
                        selfO.elem.value = selfO.elem.value.substring(0,selfO.elem.value.length-1);
                        return;
                    }
                    selfO.validateValue();
                }


            this.validateValue = function(){
                if(Number(selfO.elem.value) > selfO.max) {selfO.elem.value = selfO.max;}
                if(Number(selfO.elem.value) < selfO.min) {selfO.elem.value = selfO.min;}
            }

            this.stopSpinning = function(){
                clearTimeout(selfO.timer);
            }

            this.spinValue = function(dir){
                selfO.elem.value = Number(selfO.elem.value) + dir;
                selfO.validateValue();
                selfO.timer = setTimeout(function(){selfO.spinValue(dir);},selfO.speed);
            }

        };

 window.onload=function(){
            //create the Spinner objects
            var SpinnerHours = new Spinner(document.getElementById('txtHours'),0,23);
}

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

Чтобы вернуть число типа 00000009 как 9, используйте parseInt();

alert( parseInt(000000009, 10) );  // returns 9

Как указал Джонатан Лоновски Второй параметр - основание.

Параметр radix используется для указания используемой системы счисления, например, шестнадцатеричное основание, означающее, что число в строке следует анализировать с шестнадцатеричного числа на десятичное число.

Если параметр radix опущен, JavaScript предполагает следующее:

  • Если строка начинается с "0x", основание будет 16 (шестнадцатеричное)
  • Если строка начинается с «0», основание будет 8 (восьмеричное). Эта функция устарела
  • Если строка начинается с любого другого значения, основание будет 10 (десятичное число)
0 голосов
/ 20 ноября 2011
//question 2 answer
var input='';
document.getElementById('inputName').onkeydown=function(e){
  e = e || window.event;
  keycode = e.keyCode || e.which;
  if(keycode !== 8 || keycode !== 46){//backspace and delete keycodes
    input=this.value;
  }
}
//question 1 answer
document.getElementById('inputName').onblur=function(){
  var a=this.value;
  if(isNaN(a)){
    this.value=input-0;
  }
  else{
    this.value=a-0;
  }
}

Когда пользователь вводит число, он сохраняет значение, если только он не нажимает клавишу Delete или Backspace. Затем, когда вход теряет фокус, он проверяет, и если там нет действительного числа, он изменяет его на сохраненное значение. Также онблур избавляется от лишних нолей Кроме того, вам нужно будет добавить больше к части, которая проверяет ввод. Например, изменив любой нечисловой ввод на ''. Другими словами, это не доказательство идиота.

...