jQuery UI微调器-可以通过键盘超过“max”
jQueryUI微调器出现问题。在微调器上设置最大值时,使用微调器按钮时不可能超过此最大值。然而,使用键盘我们可以找到任何数字 不过,我们也需要允许用户使用键盘。在jQueryUI中有标准的解决方案吗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 })
正如您在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);
}
}
});