当各种元素发生变化时,我有一个远程提交的表单。特别是在搜索字段上,我使用 keyup 来检测字段中的文本何时更改。这样做的问题是,当有人键入“chicken”时,表单会提交七次,只计算最后一次。
什么会更好是这样的
检测到 keyup - 开始等待(等待一秒钟)
检测到另一个键控 - 重新启动等待时间
等待完成 - 获取价值并提交表单
在我开始编写我自己的版本之前(我真的是一个只有一点 js 的后端人员,我对所有事情都使用 jQuery),是否已经有一个现有的解决方案?这似乎是一个普遍的要求。也许是一个 jQuery 插件?如果不是,那么编写此代码的最简单和最好的方法是什么?
更新 - 为 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;
}