jQuery UI微调器-可以通过键盘超过“max”

jQuery UI微调器-可以通过键盘超过“max”,jquery,jquery-ui,jquery-ui-spinner,Jquery,Jquery Ui,Jquery Ui Spinner,jQueryUI微调器出现问题。在微调器上设置最大值时,使用微调器按钮时不可能超过此最大值。然而,使用键盘我们可以找到任何数字 不过,我们也需要允许用户使用键盘。在jQueryUI中有标准的解决方案吗 正如您在Rab Nawaz()更新的fiddle中所看到的,blur总是被调用,这导致我们的逻辑运行两次。编辑:以处理负数。谢谢你指出这一点 您可以使用oninput事件:{'keyup paste'用于不支持它的旧浏览器} $(“输入”).spinner({ 最高:10, 最低:-10 })

jQueryUI微调器出现问题。在微调器上设置最大值时,使用微调器按钮时不可能超过此最大值。然而,使用键盘我们可以找到任何数字

不过,我们也需要允许用户使用键盘。在jQueryUI中有标准的解决方案吗


正如您在Rab Nawaz()更新的fiddle中所看到的,
blur
总是被调用,这导致我们的逻辑运行两次。

编辑:以处理负数。谢谢你指出这一点

您可以使用oninput事件:{'keyup paste'用于不支持它的旧浏览器}

$(“输入”).spinner({
最高:10,
最低:-10
}).on('input',function(){
if($(this).data('onInputPrevented'))返回;
var val=此.val值,
$this=$(this),
max=$this.spinner('option','max'),
min=$this.spinner('option','min');
//我们只需要数字,不需要阿尔法。
//我们将其设置为以前的默认值。
如果(!val.match(/^[+-]?[\d]{0,}$/)val=$(this.data('defaultValue');
this.value=val>max?max:val
仅供参考,我自己提出了这个解决方案:

    $("input").spinner({
        stop: function (event, ui) {
            $(this).change();
        }
    }).change(function () {

        // min/max calculations
        callFunction();

    });

这似乎很好,但的答案看起来更好。

我知道我错过了机会,但对于一个按照您要求的方式运行的自给自足的旋转器,您可以使用该事件-

$('input')。微调器({
分:0,,
最高:3,
页码:10,
更改:功能(事件、用户界面){
var值=此.value
min=this.min,
max=this.max;
如果(!value.match(/^\d+$/){//值为非数字
/**将该值设置为上一个值*/
值=0
}否则{//值为数值
/**检查值是否在最小和最大范围内*/
如果(值>最大值){
值=最大值;
}否则如果(值<最小值){
值=最小值;
}
}
/**将正确的值发送到微调器(如果需要更改)*/
如果(值!==此.value){
$(此).spinner(“值”,值);
}
}
});

这似乎与退格有关。例如,使用最小值:2,最大值:10,并尝试在不使用箭头键的情况下从2更改为3。您永远不能输入,即使只是在您仍在编辑时暂时输入。@sergiopereira我更新了答案以处理此行为,谢谢!这里的一个漏洞是,您可以使用delete键生成小于指定最小值的值。例如,将最小值设置为4。输入值43。使用delete键删除4。现在只剩下3个。
    $("input").spinner({
        stop: function (event, ui) {
            $(this).change();
        }
    }).change(function () {

        // min/max calculations
        callFunction();

    });
$('input').spinner({
    min: 0,
    max: 3,
    page: 10,
    change: function(event, ui){

        var value = this.value
            min = this.min,
            max = this.max;

        if (!value.match(/^\d+$/)){ // Value is non-numerical

            /** Set the value to the previous value */
            value = 0 

        } else { // Value is numerical

            /** Check that value falls within min and max range */
            if(value > max){
                value = max;
            } else if(value < min){
                value = min;
            }

        }

        /** Send the correct value to the spinner (if it needs changing) */
        if(value !== this.value){
            $(this).spinner("value", value);
        }

    }
});