我写了一个自定义的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