![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Mastodont |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
У меня сейчас есть такая страничка:
Три <select>, каждый из которых в своем <div> (примечание: кол-во select'ов растет по кнопке "Вперед", но пока пусть их будет три). Сейчас выбрано "автобус", "самолет" и "поезд". Мне нужно, чтобы при выборе в строке №1 самолета вместо автобуса стоящий справа select тоже менялся. А при выборе во 2й строке поезда в правом select'е появлялись опции для поезда. Сейчас все три левых select'а добавляют новый select справа только в первой строчке (пока правые select'ы появляются друг за другом; хотя надо, чтобы следующий убивал предыдущий и занимал его место; но щас вопрос не в этом, потом разберусь). Это происходит потому, что мне не удается передать в функцию make_bus_option() или make_air_option() или make_train_option() id div'а, в котором расположен левый select, обработчик пункта option которого сработал. Вот код страницы
Я пробовал писать так
но в make_bus_option(new_div_id) все равно ничего не передается. Кто знает, как решить вопрос этим или другим способом? Это сообщение отредактировал(а) Aliance - 3.10.2012, 11:30 |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
лучше не используй innerHTML.
вместо него — appendChild. а то сейчас, к примеру, ты создаешь <select>, а потом внутрь него пихаешь еще <select> с <option> Добавлено через 2 минуты и 42 секунды события же цепляются через addEventListener для всех браузеров окромя IE(для него — attachEvent). |
|||
|
||||
| Mastodont |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
Переписал так
Опиши подробнее как. Попробовал то, что нарыл в инете - работает не совсем так, как хочу) |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
||||
|
||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
ой, строку document.getElementById('bus').addEventListener('onclick', make_bus_option()); раскомментить надо)) загвоздка в том, что сейчас при нажатии кнопки "Вперед" создается и <select> с типами транспорта, и <select> с опциями автобуса. А опции должны создаваться только при выборе автобуса в <select> с типами транспорта. Так вот как для <option>Автобус</option> задать onclick="make_bus_option()"? |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Вот так
Вообще, если открыть для себя jQuery, получится значительно меньше кода и существенно меньше проблем с отладкой логики и кроссброузерности. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
ksnk, погоди с jQuery.
Mastodont, во-первых, да, onchange вместо onclick. во-вторых, не ведись пока на разговоры про jquery, лучше сначала без него разобраться, а то так и будет путаница. |
|||
|
||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
onChange в моем случае работает также, как и onClick. Как событие-то задать для пункта списка?
На разговоры о JQuery не ведусь) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
например, так
|
|||
|
||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
skyboy, спасибо, но ты не совсем то предлагаешь.
Мне надо, чтобы при выборе в первом <select> Автобуса появлялся второй <select> с опциями автобуса. При выборе самолета - опции самолета. При выборе поезда - опции поезда. Для этого каждому из элементов <option> списка <select id='target'> надо назначить свое событие. В html это бы выглядело так (из первого поста этой темы):
И оно работало Но я так понял, хорошим тоном считается создавать такие вещи через DOM и свойства объектов? Так вот как мне это реализовать? |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Не в каждом броузере поддерживается метод onchange для элемента option. Это насчет кроссбраузерности. Насчет удобства - чем объясняется замена 1 строчки в первом случае на множество строк в последнем примере? Не существует понятия "модно" в программировании. Существует понятие "удобно". Понятие "Удобно" относится к программисту php, программисту Javascript и верстальщику. "Удобно" относится к действиям "писать код", "изменять код" и искать в нем ошибки. Всего 3x3 варианта решения, скорее всего - разных. Вероятно их больше. Самый первый вариант (с учетом изменений skyboy), удобен программисту на стадии "пиши код", но неудобен верстальщику на всех стадиях. Верстальщик не обязан знать javascript и ковырять сторонние файлы со своими кусочками верстки. Самый последний вариант еще более неудобен верстальщику, и сложнее для программиста на всех этапах (больше букв) ;) Вот вариант, если селекты уникальны и присутствуют на страничке в одном экземпляре - скрывать и показывать их по мере определения предпочтений пользователя. Еще вариант решения, который, imho, более удобен в работе - клонирование уже готовых элементов
Серверный программист всегда генерирует HTML листинг по шаблону и ему не нужно генерировать еще и Javascript. Javascript можно выкинуть в отдельный файл и экономить на трафике. Верстальщик всегда может добраться до всех своих элементов в одном файле-шаблоне. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
то, что я предлагаю — увидеть, что в единственном обработчике onchange первого select'a ты в курсе — какой элемент выбрали. и можешь в этом единственном обработчике в зависимости от того, какой элемент выбрали, показывать один связанный select или другой |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |