2017-04-09 179 views
1

延遲,我得到這個代碼:jQuery的 - 正確的輸入最小值/最大值與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/max70/250和用戶嘗試鍵入200它就會瞬間從270修正-_-所以我需要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沒有得到即時糾正」的問題?

+0

也許onchange而不是keyup?所以你只能在完成'輸入'後才改變用戶輸入 – naortor

+0

不錯,我認爲我會去那謝謝:D但是你是否仍然有解決方案的鍵盤延遲?我承擔不起更多「未解決」的問題,否則我將無法再提問xD –

回答

0

你可以使用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); 
     } 
}); 
相關問題