JQuery: наблюдать поле с частотой - PullRequest
3 голосов
/ 23 февраля 2010

Мне нужно использовать JQuery для обнаружения изменений в текстовом файле, поэтому вызывается некоторый ajax.

Хитрость в том, что я не хочу связывать это действие с событиями размытия или нажатия клавиш; Первый слишком громоздкий для пользователя, а второй «слишком посредственный»: пользователь вводит новые ключи до того, как завершится вызов ajax, поэтому взаимодействие с пользователем невелико (поэтому ответ на этот ТАК вопрос не относится к моему делу).

Мне нужен некоторый код, который проверяет, менялось ли значение поля, но периодически (т.е. каждые 0,5 секунды). Я хотел бы использовать один и тот же код в нескольких полях, вызывая разные функции ajax с разными частотами, поэтому повторное использование действительно является плюсом.

На Rails у меня был observe_field (внутренне использует Prototype Form.Element.observer , я думаю), который сделал именно это. Как я могу выполнить эквивалентную вещь в JQuery?

Ответы [ 3 ]

5 голосов
/ 24 февраля 2010

В итоге я развернул свой собственный плагин jquery.

Это (слабо) основано на реализации Mic.

Создал для него проект github:

http://github.com/splendeo/jquery.observe_field

Основные различия с микрофоном:

  • Я использую методы jQuery вместо нативных в нескольких местах.
  • Я не активирую / деактивирую обнаружение onblur и onfocus. Таким образом, я могу отслеживать изменения, сделанные с помощью кода (это делает rails наблюдаемое поле, и я хотел имитировать это)
  • Я сбрасываю таймер при каждом включении. Мне это нужно для того, чтобы хорошо играть с мобильными устройствами, такими как iphone.

Быстрый фрагмент:

$(function() {
  // Executes a callback detecting changes with a frequency of 1 second
  $("#item1").observe_field(1, function( ) {
    alert('Change observed! new value: ' + this.value );
  });
});
2 голосов
/ 23 февраля 2010

Вот решение, в котором используется простая функция JS: Как получить значение из поля ввода формы html при его вводе? Вы можете использовать вызов $ (...). Focus (...), чтобы использовать его с jquery, если хотите.

В режиме onfocus на поле происходит периодическая проверка, изменилось ли значение, если это так, вызывается функция обратного вызова «после».
При выходе из поля на onblur опрос останавливается.

Это будет работать, даже если пользователь вносит некоторые косвенные изменения, такие как отмена / повтор или копирование / вставка в поле.

0 голосов
/ 23 февраля 2010

Вы можете установить таймер для проверки каждые n секунд ввода, есть плагин для jQuery, который даст больше контроля над таймерами.

http://jquery.offput.ca/every/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...