さまざまな要素が変更されたときにリモートで送信されるフォームがあります。特に検索フィールドでは、フィールド内のテキストがいつ変更されたかを検出するためにキーアップを使用しています。これの問題は、誰かが「chicken」と入力すると、フォームが 7 回送信され、最後の 1 回だけがカウントされることです。
このようなものが良いでしょう
キーアップが検出されました - 待機を開始します (1 秒間)
別のキーアップが検出されました - 再起動の待ち時間
待機終了 - 値を取得してフォームを送信
これの独自のバージョンをコーディングする前に (私は本当に小さな js しか持たないバックエンドの男で、すべてに jQuery を使用しています)、これに対する既存のソリューションは既にありますか? それは一般的な要件のようです。jQueryプラグインかな?そうでない場合、これをコーディングする最も簡単で最良の方法は何ですか?
更新 - ダンに追加された現在のコード (以下)
ダン - これは関連している可能性があります。このページで使用している jQuery プラグインの 1 つ (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;
}