我想在用戶鍵入文本框後執行一個類似於2秒的功能。如果他們在1秒後繼續鍵入,則延遲時間將重置爲2.jQuery值更改事件延遲
它應該功能類似於自動填充框。
我知道2個事件:change
和keyup
。我與change
的問題在於,文本框必須放鬆焦點才能觸發它。對於keyup
,如果他們使用鼠標粘貼文本會怎麼樣?
我可以幫忙嗎?
我想在用戶鍵入文本框後執行一個類似於2秒的功能。如果他們在1秒後繼續鍵入,則延遲時間將重置爲2.jQuery值更改事件延遲
它應該功能類似於自動填充框。
我知道2個事件:change
和keyup
。我與change
的問題在於,文本框必須放鬆焦點才能觸發它。對於keyup
,如果他們使用鼠標粘貼文本會怎麼樣?
我可以幫忙嗎?
還有的HTML5 oninput
事件,所有目前的主流瀏覽器和支持,並可加工成IE 8下:
$("#myInput").bind("input", function() {
// ...
})
一個非常簡單的跨瀏覽器方法是
$("#myInput").bind("input propertychange", function (evt) {
// If it's the propertychange event, make sure it's the value that changed.
if (window.event && event.type == "propertychange" && event.propertyName != "value")
return;
// Clear any previously set timer before setting a fresh one
window.clearTimeout($(this).data("timeout"));
$(this).data("timeout", setTimeout(function() {
// Do your thing here
}, 2000));
});
這將使事件火IE 9(一爲propertychange
,一個用於input
)的兩倍,但它並沒有因爲事件處理程序的本質關係。
你可以把兩者變化和KEYUP:
var globalTimeout;
$(function() {
$("#myInput").change(initTimer).keyup(initTimer);
});
function initTimer() {
if (globalTimeout) clearTimeout(globalTimeout);
globalTimeout = setTimeout(handler, 2000);
}
function handler() {
...
}
keyup
將工作:
$("#s").keyup(function(e){
$("#t").html($(this).val());
});
的jsfiddle:http://jsfiddle.net/3nx6t/
'keyup'是檢測用戶輸入的不佳事件。只有當用戶將他的手指從鑰匙上擡起並且僅僅是鍵盤輸入(沒有粘貼,拖放/拼寫檢查更正等)時纔會觸發。 – 2011-05-06 21:52:07
@安迪:請參閱演示。 jQuery 1.6也支持粘貼! – 2011-05-06 21:53:00
右鍵點擊並選擇粘貼,不會觸發 – 2011-05-06 21:58:16
我會做這樣的:
$("selector").keyup(function(){
if(typeof(window.delayer) != 'undefined')
clearTimeout(window.delayer);
window.delayer = setTimeout(function_you_want_to_get_execute_with_delay, 2000);
});
乾杯
您可以綁定input
事件,也可以綁定keyup
以在舊版瀏覽器上回退。然後,您可以啓動計時器,每次檢測到用戶操作時都會重置計時器。通過將計時器句柄保存在當前元素的數據中,確保多個元素不會相互干擾。
$('input').bind('input keyup', function(){
var $this = $(this);
var delay = 2000; // 2 seconds delay after last input
clearTimeout($this.data('timer'));
$this.data('timer', setTimeout(function(){
$this.removeData('timer');
// Do your stuff after 2 seconds of last user input
}, delay));
});
應該在你的例子中event.type是evt.type?看起來不錯,我想我[可以借用這個。 IE7引發了多種財產變更,甚至是onblur。這是否抓住他們,只處理一次?計時器的目的是什麼? – armyofda12mnkeys 2012-04-26 13:54:01
@ armyofda12mnkeys:nope,'event.type'是正確的,它正在尋找IE中提供的全局'event'對象。如果你想要更加謹慎,你可以把它改成'window.event。*'。它只處理'value'屬性的變化,如果它觸發不止一次,那麼它會取消前一個設置的定時器。 – 2012-04-26 14:10:32