| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Наши скрипты > Изменение значения в списке select |
| Автор: Aliance 19.9.2005, 17:39 | ||||||
| Задача: изменить значения во втором выпадающем списке, следуя выбору из первого. Решение:
Обсуждение: Имеем 2 элемента select, предоставляющий объекты HTMLSelectElement. По событию onchange вызываем функцию setCities(), принимающую аргумент chooser, являющийся ссылкой на этот самый объект HTMLSelectElement первого элемента select (this). Далее читаем выбранное значение:
Далее вставляем первый неизменный дочерний элемент option:
А далее из массива regiondb["выбранный_континент"] читаем значение, в виде объекта с 2 полями - value и text, и соответственно в цикле for их подставляем. Все. |
| Автор: Sardar 21.9.2005, 00:31 |
| Очень хорошо. Следующим шагом будет неограниченное количество цепочек, а не два селекта. Также динамическая подзагрузка XML с данными конкретной цепочки, а не цельный массив. В целом классно |
| Автор: Tangash 29.10.2006, 12:09 |
| А как теперь выбранные РЕГИОН и ГОРОД передать в PHP??? |
| Автор: 12345c 30.10.2006, 19:00 |
| Нажать на кнопку "Отправить" формы. (???) |
| Автор: tolik777 21.12.2006, 10:37 | ||
А этот шаг уже есть? А то встала такая вот задача, а как реализовать не пойму |
| Автор: Aliance 24.12.2006, 02:14 |
| Какой именно шаг: два селекта или XML? |
| Автор: bars80080 13.12.2007, 11:34 | ||
если выбираются значения по-умолчанию в пхп, то в пхп, это и можно сделать, просто во второй селект слить список азиатских значений и также выбрать пункт по-умолчанию по тому же принципу:
|
| Автор: KonstRuctor 14.12.2007, 03:33 | ||
Я не совсем то имел в виду. Таким образом, действительно, удобно получить выделенное значение селекта. Однако я пытаюсь сделать нечто другое. Вот смотрите, рассмотрим данный пример с континентами и городами. У меня большая форма ввода данных, и кроме этих двух связанных селектов есть еще несколько обычных полей ввода информации: <input type="text">. Если я добавляю новую запись, все понятно. Просто заполняю форму и отсылаю данные на сервер -- у меня связанные селекты работают изумительно. НО! если я хочу отредактировать имеющуюся запись, мне на экран показываются все данные об этой записи, то есть все поля ввода <input type="text"> заполнены данными, которые я хочу редактировать, прочитанными из базы. Так вот, и эти два связанных селекта должны быть в "заполненном" положении, то есть в первом должен быть выбран континент, во втором - город. * * * Это очень принципиально, так как иначе редактирование записи сделать невозможно, или надо его производить в два этапа. Предположим, админ захотел поменять континент, он его поменял, потом в новом окне ему уже предлагают поменять город для вновь выбранного континента.... Иначе нарушается логика связей между двумя селектами. * * * ВОПРОС. Кто знает, как реализовать даную функцию для данного примера? Спасибо. |
| Автор: bars80080 14.12.2007, 10:32 |
| всё равно не вижу проблем, либо просто не понял имхо: всё чем оперирует js уже есть в браузере допустим мы формируем два селекта, по выбору в первом у нас обновляется список значений во втором, стало быть данные для этих селектов уже были выбраны со всей бд и они находятся на клиентской стороне, то есть данные для второго селекта составляют список всех возможных городов мира, а мы просто сужаем поиск выбирая континент собственно я уже делал это здесь http://turne-trans.ru/service/hotelsearch/ если мы хотим, чтобы при выборе второго селект заполнялись все элементы text в форме, то: 1. либо нам нужно, чтобы вся бд уже присутствовала здесь, но для большой бд это загнёт трафик 2. либо при выборе второго селект у нас происходил запрос на сервер и он выдавал страницу с заполненными полями, что собственно все и делают в этом случае не видно совершенно никакой проблемы, просто нужно грамотно написать вставку значений по умолчанию |
| Автор: KonstRuctor 14.12.2007, 12:10 | ||
Мне не понятно, как сделать так, чтобы при редактировании записи второй селект также был заполнен, при этом функциональность двух связанных селктов была бы сохранена. Дело в том, что фунция по событию onchange срабатывает, а при загрузке значений из базы, видимо, не срабатывает. * * * То есть при загрузке из базы для редактирования первый селект у меня выбран верно, а во втором красуется одинокое "Выберите город" и под ним пусто. Если поменять континент на какой-то другой, функциональность работы двух селектов восстанавливается, но идея безопасного редактирования теряется, так как администратор уже забыл, какие ДОЛЖНЫ быть значения изначально. * * * Поэтому я хочу сделать так, чтобы при редактировании записи администратор ВИДЕЛ на экране два связанных селекта с высвеченными на них значениями. * * * Не знаю, какими еще словами мне описать проблему. Я нашел "тупое" решение: выводить все данные о записи в полях формы, а данные, которые надо было бы выводить в селектах, показывать просто текстом и рядом ссылку "редактировать континенты/страны". И попадать в другое окно, где уже редактируем с чистого листа, потом возврат к основной форме, где уже будут указаны новые, только что отредактированные значения. Вот только так выходит. |
| Автор: bars80080 14.12.2007, 14:41 |
| решение проблемы всегда есть посмотрите пожалуйста на эту страницу http://turne-trans.ru/motortrans/transfer/ там находится форма заказа, на которой сопряжены между собой пять селектов город, откуда, куда, вокзал и аэропорт изменяя город, мы изменяем и список вокзалов и аэропортов если вы не заполните какие-нибудь поля отмеченные *, заказ оформлен не будет, и вас выкинет обратно в эту же форму, но если бы при этом исчезала информация из тесктовых полей и из селекта, то новое заполнение немало бы расстроило клиента, поэтому мне пришлось обыграть эту проблему принцип тот же: сохранить функциональность и выставить введённые ранее значения если вас это устроит (если я правильно понял что вы хотите), могу выложить код, уверен разберётесь |
| Автор: KonstRuctor 14.12.2007, 19:11 |
| Воистину, оно! Действительно, все работает как вы говорите. У меня задача гораздо проще: увязать три таблицы: Страна: country_id, country_name Город: city_id, country_id, city_name Товар: tovar_id, country_id, city_id, tovar_name Предположим, все таблицы заполнены данными. Далее я хочу редактировать товар, имеющийся в базе. На экране вижу: Наименование товара: tovar_name и два связанных селекта, в одном из них показан список стран с активной country_id, в другом -- список городов для этой страны с активным городом city_id. При этом админ легко может щелкать любую другую страну, город и т.д., то есть связанность селектов сохранятся. * * * Что я умею делать? Я умею выводить список стран с активной страной данного товара, рядом у меня выводится пустой список городов с предложением выбрать город. * * * Сегодня часов 5 искал решение по разным форумам. Ничего не нашел. Если вам не жалко показать ваш код, буду очень благодарен. Попробую разобраться, хотя у вас там все гораздо сложнее! Можно мне на почту -- как вам удобнее. |
| Автор: KonstRuctor 16.12.2007, 04:46 | ||||||
| Я нашел решение проблемы. Решается с помощью библиотек jQuery 1.2.1 или prototype.js. В head вставляется
И далее
А вся работа с базой данных происходит в файле sublist.php
В принципе я заставил это все работать как мне надо. НО! У меня во втором связанном селекте появляются квадратики вместо русских букв. Никак не могу понять, откуда это хрень вылезает и как ее побороть. Никто не сталкивался с этим? |
| Автор: bars80080 17.12.2007, 12:04 | ||
| сорри, меня по выходным не бывает код следующий: http://interes.uzelok.net/files/transf.rar здесь не выкладываю, потому как русский текст в кракозябры превращается, кстати, как этого избежать?, всё время забываю спросить извиняюсь за код, тяжеловесен, пришлось перемалывать предыдущую структуру, написанную не мной понятное дело это только кусок, но весь js там что касается
на лицо проблемы с кодировкой, товарищи здесь говорят о том, что js работает в utf, а вывод вы навеняка планировали в cp-1251, но это уже другой вопрос и на эту тему вам могут ответить более компетентные люди |
| Автор: CTAzz 18.12.2007, 23:53 | ||
А как вывернуть значения второго селекта из мискула?
|
| Автор: KonstRuctor 19.12.2007, 00:38 | ||
Вот мой код. Может, он и не совсем красивый, но работает.
У меня небольшая путаница с названиями переменных, надеюсь, разберетесь что к чему |
| Автор: CTAzz 19.12.2007, 12:49 | ||
| Что-то у меня не хочет показывать значения, страница становится пустой. Вот так переделал
Поясню. В таблице marks находятся поля id, name( хранит значения первого списка), tablemodel( хранит значения таблицы, в котором лежит список 2, на примере models_acura, в поле хранится значение acura) В таблице models_acura 2 поля id, model( хранит значения второго списка |