我得到了这个代码:
var $this = $(this);
var val = $this.val();
var max = $this.attr("max");
var min = $this.attr("min");
if (max > 0 && val > max){
e.preventDefault();
$this.val(max);
}
else if (min > 0 && val < min)
{
e.preventDefault();
$this.val(min);
}
问题是,例如,当 min/max
为 70/250
并且用户尝试输入 200
时,它会立即从 code>2
到 70
-_- 所以我需要在 keyup
上超时/延迟,所以我尝试了:
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$("input").keyup(function(e) {
delay(function(){
var $this = $(this);
var val = $this.val();
var max = $this.attr("max");
var min = $this.attr("min");
if (max > 0 && val > max){
e.preventDefault();
$this.val(max);
}
else if (min > 0 && val < min)
{
e.preventDefault();
$this.val(min);
}
}, 1000 );
});
但现在修正尚未执行。怎样做才正确呢?还有人有更好的想法来解决“输入 200 而没有立即更正”问题吗?
最佳答案
您可以使用 Jquery focusout 函数。
https://www.w3schools.com/jquery/event_focusout.asp
这将检查用户何时移动到另一个字段或输入部分,然后执行验证。这样就不需要计时器或延迟了。
$("input").focusout(function(e) {
var $this = $(this);
var val = $this.val();
var max = $this.attr("max");
var min = $this.attr("min");
if (max > 0 && val > max){
e.preventDefault();
$this.val(max);
}
else if (min > 0 && val < min)
{
e.preventDefault();
$this.val(min);
}
});
关于javascript - jQuery - 正确输入最小/最大,键盘延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307707/