我希望微调器正确显示数字

时间:2011-11-20 02:04:31

标签: javascript spinner

我有两个问题:

问题1:我有一个微调器功能,我有一个小问题。例如,如果用户在微调器中键入00000009或00021,如果用户点击旋转器,它仍将在微调器中显示00000009或00021。我想要的是,如果这样的事情发生,那么我想要的是,当用户点击时,我希望微调器显示为9或21而不是00000009或00021.我不知道如何做到这一点虽然。有谁知道如何克服这个问题:

问题2:如果我使用退格键从一个微调器中删除一个数字,并留下一个空白微调器,那么需要做什么,这样如果我点击微调器,旋转器中的最后一个数字会重新出现在微调器中?

我的主要微调功能:

    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 个答案:

答案 0 :(得分:3)

要将00000009之类的数字作为9返回,请使用parseInt();

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

正如Jonathan Lonowski指出的那样。第二个参数是基数。

radix参数用于指定要使用的数字系统,例如,16(十六进制)的基数表示字符串中的数字应从十六进制数解析为十进制数。

如果省略radix参数,则JavaScript假定以下内容:

  • 如果字符串以“0x”开头,则基数为16(十六进制)
  • 如果字符串以“0”开头,则基数为8(八进制)。不推荐使用此功能
  • 如果字符串以任何其他值开头,则基数为10(十进制)

答案 1 :(得分:0)

//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;
  }
}

这是做什么的,当用户输入一个数字时,它会保存值,除非按下删除或退格。然后当输入失去焦点时,它会检查并且如果没有有效数字,则将其更改为保存的值。此外,onblur摆脱了任何额外的零。此外,您还需要向检查输入的部件添加更多内容。例如,将任何非数字输入更改为''。换句话说,它不是白痴证明。