【问题标题】:I want spinner to display numbers properly我希望微调器正确显示数字
【发布时间】:2011-11-20 12:36:35
【问题描述】:

我有两个问题:

问题 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);
}

【问题讨论】:

  • 我以为我包含了底部功能以帮助您更好地理解它

标签: javascript spinner


【解决方案1】:

要将像 00000009 这样的数字返回为 9,请使用 parseInt();

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

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

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

如果 radix 参数被省略,JavaScript 假设如下:

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

【讨论】:

  • 使用前导 0,您需要传递 10 的基数以避免八进制评估 -- parseInt("000000009", 10)。您的示例按原样工作,因为它已经是一个数字。
  • 我应该在哪里插入解析插入我的代码,我在底部函数 parseInt(0),parseInt(23);但这没有用
  • 很高兴知道,刚刚阅读了有关 radix 参数的信息,从不知道它或使用过它...无论哪种方式我都学到了一些新东西,所以 +1 并更新了我的答案。
  • @user1050384 您可以在 onkeyup 函数中使用它,在 return; 之前 -- selfO.elem.value = parseInt(selfO.elem.value, 10);
  • 试试 parseInt(self0.elem.value)
【解决方案2】:
//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 也消除了任何多余的零。此外,您需要向检查输入的部分添加更多内容。例如将任何非数字输入更改为''。换句话说,它不是白痴证明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多