Использование "setTimeout ()" в моем выражении jQuery - PullRequest
3 голосов
/ 26 марта 2010

Я пытаюсь добавить функцию JavaScript setTimeout() в выражение jQuery. Без setTimeout() моя функция загружает частичное представление с обновленной информацией при вводе текста в текстовое поле. Но он загружает информацию при каждом нажатии клавиши. Моя логика заключается в том, что если я могу установить таймер, то, когда пользователь перестанет печатать, через секунду данные обновятся.

Как видите, я пытался вставить setTimeout(), но, похоже, он не работает.

$(function() {
    $('#DocId').live('keyup', function() {
        setTimeout(var styleValue = $(this).val();
        $('#tableContent').load(
        '/CurReport/TableResults', 
        { style: $(this).val()}), 1000);

    }),
});

Спасибо,

Aaron

1 Ответ

5 голосов
/ 26 марта 2010

Вы можете использовать .data() и включить таймер задержки, который сбрасывает каждое нажатие клавиши следующим образом:

$('#DocId').live('keyup', function() {
  clearTimeout($.data(this, 'timer'));
  var val = $(this).val();
  var wait = setTimeout(function() {
    $('#tableContent').load('/CurReport/TableResults', { style: val });
  }, 1000);
  $(this).data('timer', wait);
});

Устанавливает тайм-аут в 1 секунду при каждом нажатии клавиши на элементе, который он набрал (может иметь любое количество нажатий одновременно). Каждое нажатие клавиши очищает предыдущий таймер и устанавливает новый, так что только через 1 полную секунду отсутствия ввода функция сработает.

Примечание: не удаляйте часть var val = $(this).val();, вам нужна переменная, потому что this - это другой контекст, когда функция фактически выполняется.

...