[英]jQuery - correct input min / max with delay on keyup
我得到了这段代码:
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
它会立即从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而不立即纠正”的问题?
你正在寻找的是'去抖':你可能想要修补这个解决方案: https : //davidwalsh.name/javascript-debounce-function
您可以使用Jquery焦点输出功能。
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);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.