【发布时间】:2010-01-20 12:24:07
【问题描述】:
我有一个在各种元素发生变化时远程提交的表单。特别是在搜索字段上,我使用 keyup 来检测字段中的文本何时更改。这样做的问题是,当有人输入“chicken”时,表单会提交七次,只计算最后一次。
最好是这样的
检测到keyup - 开始等待(等待一秒钟)
检测到另一个按键 - 重新启动等待时间
等待完成 - 获取值并提交表单
在我开始编写我自己的版本之前(我真的是一个只有一点 js 的后端人员,我对所有事情都使用 jQuery),是否已经有一个现有的解决方案?这似乎是一个普遍的要求。也许是一个 jQuery 插件?如果不是,那么最简单和最好的编码方式是什么?
更新 - 为 Dan 添加的当前代码(如下)
Dan - 这可能是相关的。我在页面上使用的其中一个 jQuery 插件(tablesorter)需要此文件 - “tablesorter/jquery-latest.js”,如果包含该文件,则会导致您的代码出现与以前相同的错误:
jQuery("input#search").data("timeout", null) 未定义 http://192.168.0.234/javascripts/main.js?1264084467 11号线
也许不同的 jQuery 定义之间存在某种冲突? (或什么)
$(document).ready(function() {
//initiate the shadowbox player
// Shadowbox.init({
// players: ['html', 'iframe']
// });
});
jQuery(function(){
jQuery('input#search')
.data('timeout', null)
.keyup(function(){
jQuery(this).data('timeout', setTimeout(function(){
var mytext = jQuery('input#search').val();
submitQuizForm();
jQuery('input#search').next().html(mytext);
}, 2000)
)
.keydown(function(){
clearTimeout(jQuery(this).data('timeout'));
});
});
});
function submitQuizForm(){
form = jQuery("#searchQuizzes");
jQuery.ajax({
async:true,
data:jQuery.param(form.serializeArray()),
dataType:'script',
type:'get',
url:'/millionaire/millionaire_quizzes',
success: function(msg){
// $("#chooseQuizMainTable").trigger("update");
}
});
return true;
}
【问题讨论】:
标签: javascript jquery jquery-plugins jquery-events