Я построил каскадный выпадающий список в jquery, модифицированный из нескольких примеров.Я добавил функцию, позволяющую пользователю «выполнить резервное копирование» и повторно выбрать ранее выпадающий список.Это перезагружает следующий выпадающий список, а также очищает и отключает последующие.
http://jsfiddle.net/goodeye/gA6GZ/
Проблема в том, что после первого раза события изменения выбранных элементов связаны, поэтому я думаю,перезагрузка новых значений вызывает последующие события изменения.
Я отделил привязку .change (), а не связал ее.Раньше у меня была цепочка перед загрузкой опций выбора.Это помогло в первый раз, но не в последующие времена.
Для этой проблемы я специально ищу хороший подход к этой последовательности:
- избежать изменения ()
- обновить выпадающие списки
- настроить изменение ()
Этот вопрос: Лучший способ удалить обработчик событий в jQuery? имеет unbind ()в качестве основного ответа, затем последующий ответ использовать live ().Подход live () использует класс, который немного смущает меня и не набирает столько голосов.
Воспроизвести:Выберите шаг 1, см. Шаг 2 огонь.Выберите шаг 2, см. Шаг 3 огонь.Выберите шаг 1 снова, см. Шаг 2 огонь.тогда начинается беда:Выберите шаг 2, см. Шаг 3 огонь дважды.Выберите шаг 3, см. Шаг 4 три раза.Снова выберите шаг 1, см. Шаг 2 дважды.и т.п.Это даже становится хуже;Я увижу шаг 3 пять раз.
Некоторые подробности:
В реальном коде они загружаются из ajax-вызова json.Я удалил это из примера и добавил жестко запрограммированные параметры для имитации, ограничив это только проблемой события.
Это начинается на стороне сервера, поэтому первый раскрывающийся список уже находится в HTML.Следующие три загружаются из (смоделированных) вызовов json.
Они используют классы для идентификации, потому что реальная страница имеет более одного набора этих выпадающих списков.Код использует $ (this), чтобы быть осторожным в работе с одним выбранным набором.
Существует также функция автоматического выбора, если есть только одна опция, и переход к следующей.Этот код есть, но во всех смоделированных примерах есть несколько вариантов, чтобы избежать этой проблемы для этого вопроса.
Заранее спасибо за ваши идеи!