Prototype.js — Форма.элемент.наблюдатель Internet Explorer Поле выбора

#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. Это сделало свое дело. Мне пришлось обойти пару вещей (т. Е. флажки и переключатели реагируют не на изменение, а на щелчок), но этот ответ заставил меня начать. Спасибо!