Почему эти Element.observe ‘ajax: события’ запускаются немедленно? — Прототип

#javascript #ajax #events #prototypejs #dom-events

#javascript #ajax #Мероприятия #prototypejs #dom-события

Вопрос:

У меня есть form_element, я хочу изменить стиль при его публикации.

Я изменил уже работающий код следующим образом:

 form_element.observe("ajax:before", function(){ /*do stuff*/ });
  

к этому:

 form_element.observe("ajax:before", changeFormToPostingStyle(form_element));
  

По какой-то причине второй элемент запускается немедленно при загрузке страницы — и это независимо от события. Я попытался изменить событие ajax: complete / success / что угодно, но оно по-прежнему запускается преждевременно. Есть идеи?

Ответ №1:

Это срабатывает во время выполнения инструкции, потому что

 changeFormToPostingStyle(form_element)
  

это вызов функции, и observe ожидает, что это будет функция или вызов функции, которая возвращает функцию. Измените его на

 form_element.observe("ajax:before", function() { changeFormToPostingStyle(this) });
  

или

 form_element.observe("ajax:before", changeFormToPostingStyle);
  

и использовать this в этой функции

Комментарии:

1. Это не «Наблюдатель», а Element.observe . Однако вы правы в том, что функция должна передаваться как объект.

2. Спасибо за редактирование. Теперь похоже, что мой комментарий говорит о чем-то, чего вы не делали!

3. Спасибо за ответ! Итак, если я хочу очистить observer, могу ли я просто сделать: form_element.stopObserving(«ajax:before», changeFormToPostingStyle); ?