jquery: наблюдавайте полето с честота

Трябва да използвам JQuery, за да открия промените в текстов файл, така че се извиква някакъв ajax.

Номерът е, че всъщност не искам да обвързвам това действие със събитията blur или keyup; Първото е твърде трудно за потребителя, а второто е „твърде незабавно“: потребителят въвежда нови ключове, преди извикването на ajax да е завършено, така че потребителското изживяване не е страхотно (така че отговорът на този SO въпрос не се отнася за моя случай).

Това, от което се нуждая, е някакъв код, който проверява дали стойността на полето се е променила, но периодично (т.е. на всеки 0,5 секунди). Бих искал да използвам един и същ код в няколко полета, извиквайки различни ajax функции, с различни честоти, така че повторното използване е наистина плюс тук.

На Rails имах observe_field (вътрешно използва Form.Element.observer на Prototype , мисля), че направи точно това. Как мога да постигна еквивалентното нещо на JQuery?


person kikito    schedule 23.02.2010    source източник


Отговори (3)


В крайна сметка пуснах своя собствена приставка jquery.

Той е (свободно) базиран на изпълнението на Mic.

Създадох github проект за него:

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

Основните разлики с микрофона са:

  • Използвам методите на jQuery вместо собствените на няколко места.
  • Не активирам/деактивирам откриването на размазване и фокусиране. По този начин мога да проследявам промените, направени с код (opas_field на 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 );
  });
});
person kikito    schedule 24.02.2010
comment
Възхищавам се, че сте пуснали свой собствен плъгин - но не е ли по-логично да проверявате въз основа на това кога потребителят е спрял да въвежда вместо на постоянни интервали? Други добавки, които съм виждал, го правят въз основа на това: github.com/rpheath/searchbox - person Brian Armstrong; 01.05.2010
comment
Ем... Това имах предвид, че таймерът се нулира при всяко натискане на клавиш. - person kikito; 01.05.2010

Ето решение, което използва проста JS функция: Как да взема стойността от поле за въвеждане на html формуляр, докато се въвежда?< br/> Можете да използвате извикването $(...).focus(...), за да го използвате с jquery, ако желаете.

При onfocus на полето има периодична проверка дали стойността се е променила, ако е така, се извиква функцията за обратно извикване "след".
При напускане на полето, при onblur запитването се спира.

Това ще работи дори ако потребителят направи някои косвени промени като отмяна/възстановяване или копиране/поставяне в полето.

person Mic    schedule 23.02.2010
comment
Благодаря, Мик, ще използвам вашата реализация като шаблон. - person kikito; 23.02.2010

Можете да зададете таймер да проверява на всеки n секунди вход, има плъгин за jQuery, който ще даде повече контрол върху таймерите.

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

person Boris Guéry    schedule 23.02.2010