У меня есть форма, которая отправляется удаленно, когда различные элементы меняются. В частности, в поле поиска я использую keyup, чтобы определить, когда изменяется текст в поле. Проблема в том, что когда кто-то печатает "курица", то форма отправляется семь раз, при этом учитывается только последний.
Что было бы лучше, это что-то вроде этого
-
обнаружен keyup - начало ожидания (на одну секунду)
-
обнаружен другой ключ - перезапустите время ожидания
-
ожидание заканчивается - получите значение и отправьте форму
прежде чем я уйду и напишу свою собственную версию этого (я действительно бэкэнд-парень с небольшим js, я использую jQuery для всего), есть ли уже существующее решение для этого? Кажется, это было бы общим требованием. Может быть плагин jQuery? Если нет, то какой самый простой и лучший способ кодировать это?
ОБНОВЛЕНИЕ - текущий код добавлен для Дана (ниже)
Дан - это может быть актуально. Один из плагинов 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;
}