2014-01-13 4 views
-1
  • JQuery 2.0.3

Я хочу, чтобы выстрелить вызов AJAX при изменении данных в элементе управления редактирования ввода. Я понимаю, что могу сделать это через событие onChange. Однако, если пользователь вводит: 123 я не хочу запускать AJAX 3 раза.подход к реализации очереди AJAX

Вместо этого я хочу дождаться «периода установки», а затем погасить вызов. Период настройки сбрасывается при каждом изменении элемента управления. Таким образом, идея заключается в том, что я быстро набираю 123, некоторое время проходит (поселяется), и я делаю вызов AJAX.

Есть ли у кого-нибудь предложения о том, как реализовать это с помощью jQuery? Существуют ли какие-либо конструкции, которые я могу использовать в jQuery для этого?

ответ

2

Вам нужно душить событие с таймаутом

$('input').on('keyup', function() { 
    var self = this; 

    clearTimeout($(this).data('timer')); 

    $(this).data('timer', 
     setTimeout(function() { 
      $.ajax({ 
       url : 'someurl.php', 
       data : self.value 
      }); 
     }, 500) 
    ) 
}) 
+0

Это работало блестяще. Благодарю. – TheEdge

-1

Легкий путь с SetTimeout/clearTimeout на события изменения:

var timeout = null; 
$('input').bind('keyup blur', function() { 
    if (timeout !== null) clearTimeout(timeout); 
    timeout = setTimeout(function() { 

     // Make your ajax request here 

    }, 300); 
}); 

Изменение 300 на число миллисекунд, которые вы хотите, чтобы ждать, прежде чем запрос Ajax сделан.

+0

В 'change' событие«срабатывает, когда пользователь размывает вход и текст был изменен с момента последнего фокуса.» ([источник] (http://www.quirksmode.org/dom/events/change.html)) Он не срабатывает ни на одном ключевом событии. [Демо] (http://jsfiddle.net/9Jt5V/embedded/result/) – Trojan

+0

@ Троян - Спасибо, ты прав, просто набрал его с головы и не думал правильно. Обновлено для привязки к размытиям и событиям с ключами. –

+0

Кроме того, вам нужно назначить результат 'setTimeout'' timeout', или он никогда не будет изменен с 'null'. – Trojan

Смежные вопросы