#javascript #ajax #drop-down-menu #prototypejs
#javascript #ajax #выпадающее меню #prototypejs
Вопрос:
Я пытаюсь использовать Prototype.js ‘ Form.element.observer для выполнения некоторого ajax в веб-приложении. Один и тот же наблюдатель применяется к нескольким входным данным в форме (не ко всем из них). Наблюдатель запускает ajax, который сериализует форму, отправляет ее и в конечном итоге заменяет саму форму новой версией с сервера.
Например, допустим, есть выбор страны. Когда выбрана страна, форма сериализуется, отправляется на сервер, и сервер отвечает новой формой с выбранной страной и новым выпадающим списком для выбора провинции, который ранее не был виден. Эта новая форма заменяет старую, и вводится новый набор наблюдателей (так что можно выбрать провинцию, выбрать город и т. Д.).
Это нормально работает в FF, Chrome и Safari. Однако в IE у меня возникли проблемы с выбором. Как только я нажимаю на выбор, страница «зацикливается навсегда»; форма запрашивается и заменяется снова и снова, навсегда.
Я сильно подозреваю, что это связано со следующей частью документации по Form.element.observer:
Это запускает обратный вызов при изменении значения поля формы (в соответствии с Form.Element.GetValue). (Обратите внимание, что фактическое изменение значения может варьироваться от браузера к браузеру, особенно с полями выбора.)
Другими словами, в большинстве браузеров свойство GetValue изменяется, когда кто-то нажимает на опцию выбора. Я подозреваю, что в IE он ведет себя по-другому (просто наведя курсор на параметры, не нужно нажимать на них).
Кто-нибудь нашел способ «наблюдать» за выбором в IE с помощью prototype.js таким образом, чтобы обратный вызов запускался только тогда, когда один из его параметров действительно выбран, как в других браузерах?
Комментарии:
1. Я использую функции, подобные
$('selectbox').observe('change', handlechange)
для всех моих полей выбора onchange, и это отлично работает в разных браузерах. Какая версия IE не работает?2. Эй, Синдри, используй свой комментарий в качестве ответа. Кажется, $(‘selectbox’).observe(‘change’) работает просто отлично.
Ответ №1:
$('selectbox').observe('change', handlefunction)
Насколько я тестировал, использование работает в разных браузерах (FF 3.6 , IE 7 , Chrome 4 ).
У меня действительно возникли проблемы с использованием IE Element.observe('selectbox', 'change', handlefunction)
, поскольку, похоже, он срабатывает до того, как значение в поле выбора фактически изменяется.
Комментарии:
1. Это сделало свое дело. Мне пришлось обойти пару вещей (т. Е. флажки и переключатели реагируют не на изменение, а на щелчок), но этот ответ заставил меня начать. Спасибо!