Prototype.js - Form.element.observer + Internet Explorer + поле выбора - PullRequest
3 голосов
/ 25 октября 2011

Я пытаюсь использовать Prototype.js 'Form.element.observer , чтобы выполнить ajax в веб-приложении. Один и тот же наблюдатель применяется к нескольким входам в форме (не ко всем). Наблюдатель запускает ajax, который сериализует форму, отправляет ее и в конечном итоге заменяет саму форму новой версией с сервера.

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

Это нормально работает в FF, Chrome и Safari. В IE, однако, у меня проблемы с выбором. Как только я нажимаю на кнопку выбора, страница «зацикливается навсегда»; форма запрашивается и заменяется снова и снова, навсегда.

Я сильно подозреваю, что это связано со следующей частью документации на Form.element.observer:

Это вызывает обратный вызов при изменении значения поля формы (в соответствии с Form.Element.getValue). (Обратите внимание, что когда значение действительно изменяется, оно может изменяться от браузера к браузеру, особенно с полями выбора.)

Другими словами, в большинстве браузеров свойство getValue изменяется, когда кто-то нажимает на опцию выбора. Я подозреваю, что в IE он ведет себя по-другому (просто наводя курсор на опции, не нужно нажимать на них).

Кто-то нашел способ «наблюдать» за выбором в IE с prototype.js таким образом, что он вызывает обратный вызов только тогда, когда один из его вариантов действительно выбран, как в других браузерах?

1 Ответ

5 голосов
/ 25 октября 2011

Использование $('selectbox').observe('change', handlefunction) работает в разных браузерах, насколько я тестировал (FF 3.6+, IE 7+, Chrome 4 +).

На самом деле у меня возникли проблемы с IE при использовании Element.observe('selectbox', 'change', handlefunction)поскольку это, кажется, срабатывает до того, как значение в поле выбора действительно изменится.

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