我寫了一個自定義的jQuery的事件,因爲我用這個邏輯有很多:
jQuery.event.special.stoppedtyping = {
setup: function(data, namespaces) {
jQuery(this).bind('keyup', jQuery.event.special.stoppedtyping.keyuphandler);
},
teardown: function(namespaces) {
jQuery(this).bind('keyup', jQuery.event.special.stoppedtyping.keyuphandler);
},
keyuphandler: function(e) {
var interval = 1000;
var el = this;
if (jQuery.data(this, 'checklastkeypress') != null) {
clearTimeout(jQuery.data(this, 'checklastkeypress'));
}
var id = setTimeout(function() {
jQuery(el).trigger('stoppedtyping');
}, interval);
jQuery.data(this, 'checklastkeypress', id);
}
};
您可以使用它像這樣:
$('input.title').bind('stoppedtyping', function() {
// run some ajax save operation
});
出於某種原因,我永遠無法使它與.live(...)一起工作。我不知道爲什麼......
計時器永遠不會滿足。用戶可能只是分心或輸入比任何時候都慢的超時。我的解決方案是唯一合理的解決方案,並且是用戶期望與字段交互的方式,並且不需要任何按鈕。如果您不知道值的長度,則不知道用戶是否完成。那麼你就有冒險傳遞用戶不想或不期望的價值,他們的體驗只會讓你的計時器沮喪,而不是增強。談到UI體驗,您最好堅持使用標準的使用場景。 – nicerobot 2010-03-21 23:36:16