|
|
|
| Допустим, есть 2 поля формы типа select.
В первом поле выбирается страна, во втором город.
Как сделать так, чтобы список городов второго поля зависел от выбранной страны в первой форме.
Например, выбираю в первом поле Россию, во второй появляется список российских городов, выбираю США - список американских городов.
Как лучше это реализовать?
Спасибо! | |
|
|
|
|
|
|
|
для: Mookapek
(06.09.2008 в 20:08)
| | Массивами. Подробней - самому стало интересно - нужно будет подумать на досуге... | |
|
|
|
|
|
|
|
для: Mookapek
(06.09.2008 в 20:08)
| |
<?
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=win-1251">
<script>
var Cou = new Array ();
Cou [0] = 'Москва=Самара=Армавир=Тула=Владивосток=';
Cou [0] += 'Новгород=Астрахань=Ростов=Ярославль=Казань=';
Cou [0] += 'Челябинск=Владимир=Магадан=Махачкала'; //+ ещё города России
Cou [1] = 'Washington=New York City=Philadelphia=Boston=';
Cou [1] += 'Norfolk=Atlanta=Phoenix=Denver=Memphis=';
Cou [1] += 'Miami=Detroit=Colorado Springs'; //+ ещё города США
//+ ещё города нужных стран
function change_select (x)
{
var obj = document.forms.myForm.myCities;
obj.style.display = (x) ? 'inline' : 'none'; if (!x) return;
for (var j = obj.options.length; j > 0; j--) obj.options [j] = null;
for (var cit = Cou [x - 1].split ('='), t, j = 0; j < cit.length; j++)
{
t = document.createElement ('option');
t.text = cit [j];
t.value = cit [j]; //или t.value = j; или что-то ещё, что нужно
obj.options.add (t);
}
}
</script>
</head>
<body>
<form name="myForm">
<select name="myCountries" onchange="change_select (this.selectedIndex)">
<option>Выберите страну:</option>
<option>Россия</option>
<option>USA</option>
<!-- + ещё опшены с нужными странами -->
</select>
<select name="myCities" style="display: none">
<option>Выберите город:</option>
</select>
...
</form>
</body>
</html>
|
*Внимательно прочтите | |
|
|
|
|
|
|
|
для: Mookapek
(06.09.2008 в 20:08)
| | Лучше всего использовать AJAX, хотя я использую для этого намного проще способ, ну это таже хня. По запросу первого селекта, получаем список второго, по второму третьего... и так можно до... | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 06:50)
| | >Лучше всего использовать AJAX
Да, использовать AJAX здесь можно.
Только вот полагать, что использовать AJAX - это всегда лучше, я бы не стал.
Лучшим AJAX может быть только в одном случае - если автору страницы необходимо сильно осложнить жизнь пользователю, попытавшемуся зачем-то получить из кода страницы сразу весь список всех городов всех перечисленных в первом списке стран.
Если же список стран будет содержать даже абсолютно ВСЕ ныне существующие на планете Земля гособразования, а во вторых списках будут появляться названия даже большинства городов каждой из этих стран, то даже тогда AJAX - излишество. Причём излишество - неудобное. Значительно удобнее юзеру один раз подождать лишних две-десять секунд при загрузке страницы, чтобы потом получать вторые списки мгновенно, чем сэкономить эти две-десять секунд при загрузке страницы, но потом всякий раз ожидать появления второго списка те же две-десять секунд. | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 13:07)
| | Если список выводимый на страницу будет содержать все страны и их города (а их не одна и не две), это и есть "усложнить жизнь пользователю". Что касается времени загрузки, то это спорный вопрос. Что касается динамического получения подчиненных списков - на многих сайтах где я это встречал, не вызывает больших проблем со временем. Да и вообще, я буду выводить этот список не для того, чтобы пользователь получил его, а конкретно для решения своих задач. А вот получение подобных баз, это уже совсем иное. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 13:29)
| | Ваше мнение имеет право на существование.
Спорить не буду.
Гособразований (признанных и непризнанных стран) на планете Земля ныне насчитывается 258 штук.
Можно один раз достать из холодильника блюдо с 258-ю вишенками, поставить на стол и съесть их.
А можно и по-другому - бегать от стола к холодильнику и обратно ровно 258-ь раз, доставая из холодильника по одной вишенке.
Согласен - второй вариант лучше. Ожирения не будет точно :-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 13:48)
| | Можно один раз достать из холодильника блюдо с 258-ю вишенками
Вы уверены? а помоему как раз наоборот при каждом обращении к серверу "из холодильника" будут доставаться 258 вишенок, а съедать вы будете 2-3 штуки... остальные - в мусор!!! | |
|
|
|
|
|
|
|
для: Valick
(07.09.2008 в 14:05)
| | И с вами спорить не буду.
Ибо "на вкус и цвет товарищей нет".
Когда к вам приходят гости, вы выставляете на стол строго ограниченные пайки для каждого?
Как в тюрьме? Ни одной вишенкой больше?
AJAX ныне моден и ПОЭТОМУ многим нравится.
И многие его пользуют, не задумываясь о целесообразности.
Бывает.
Особено у тех, у кого вовсе нет дурной привычки о чём-то задумываться. | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 14:18)
| | Сейчас речь идёт не о моде, а о рациональности. Мне лично абсолютно без разници какие города есть в Гваделупе, а вы меня хотите этим нагрузить...
Если уж вам так не нравится Аякс (заметьте я сам ярый противник "завязывания" функциональности сайта на ЯвуСкрипт), то просто перегрузите страницу при выборе очередного селекта. | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 13:48)
| | Нет, если бы список предполагал небольшой набор, я бы конечно не использовал AJAX, а передал все это массивом в JS. Но список городов стран, это уже через чур, потому как придется все города всех стран сразу отдать на старницу. Ведь в противном случае потребуется перзагрузка всей страницы, при выборе другой страны. А значит лучше AJAX, ну или фрейм в простейшем случае. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 14:40)
| | >если бы список предполагал небольшой набор, я бы конечно не использовал AJAX
Ну вот, как наконец-то выяснилось, весь вопрос в субъективном понимании - что есть "большой набор", а что есть "небольшой".
Для кого-то и полстакана пива - много, а кому-то и две бутылки водки мало.
Для меня главный критерий - удобство пользователя.
Поэтому, на мой взгляд, пользователю, зашедшему на страницу, много удобнее подождать один раз, и получить страницу, где второй список будет обновляться мгновенно.
Вы же предлагаете ему "немножко подождать" всякий раз, когда он захочет, например, сравнить какие-то условия для нескольких городов разных стран.
Название одного города - в среднем 7 символов плюс разделитель (т.е. 8 байт).
Пусть для одной страны - в среднем 100 городов (хотя есть страны всего с одним городом).
258 стран * 100 городов * 8 символов = 206,5 Кбайт.
При нынешних скоростях соединения - это одна секунда, три - максимум.
При использовании AJAXа вы сами будете ставить задержку попыток в полсекунды минимум.
Вот и прикиньте - сколько времени потратит пользователь, обратившийся при использовании вами AJAXa к пяти разным странам. | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 15:14)
| | Вашими бы устами да мед пить :) Ну зачем мерять скорость в сети по своей доступной? В больших городах Росии, это еще верно, но далеко не так в провинциях дело обстоит, да и цена за трафик приличная. Глубоко сомневаюсь, что все города всех стран уложаться в 206 КБ и что в серднем название это 7 символов, а если приплюсовать сюда еще и объем страницы, который тоже может быть весьма приличным...
Вы можете делать так, я ведь не говорю, что это не имеет место быть. А мне бы не хотелось надеятся, что кто-то готов длительно ждать. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 15:42)
| | Приятно, когда оппонент так легко меняет свою точку зрения :-)
Поначалу написали, что "Лучше всего использовать AJAX"
А теперь уже - "Вы можете делать так, я ведь не говорю, что это не имеет место быть. А мне бы не хотелось надеятся, что кто-то готов длительно ждать."
Где-то, возможно, нужен AJAX.
Но много чаще рациональнее использовать иные способы.
Заявлять на голубом глазу - "AJAX форева!" - не надо :-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 17:19)
| | Я не меняю свою точку зрения в зависимости от погоды, это вы ошиблись. Но то, что загонять в массив нужное автору, кое никак в 206 КБ не поместится (тут вы явно маху дали), считают полным абсурдом. Если у всех ваших клиентов, по вашей версии, супер скорости в инете, причем дешовые, да заради бога, закачавайте, я разве против. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 17:27)
| | >то, что загонять в массив нужное автору, кое никак в 206 КБ не поместится
Автор топика вообще-то всего о двух странах написал, что прекрасно уложится менее чем в 0,5 килобайта.
А вы уже выдумываете про то, что автору и двухсот килобайт не хватит...
Попытка "сохранить хорошую мину лица" при "плохой игре" вам явно не удалась :-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 18:09)
| | Я не знаю что в конечном итоге нужно автору, две страны или не две. Пусть делает как хочет, только не надо о плохой игре и мине. Коли вы завели разговор о разумности, то значит и надо говорить о разумности. Представьте все города США и России в размере 500 байт, тогда еще можно будет говорить о разумности вашего предложения. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 18:17)
| | >Представьте все города США и России в размере 500 байт, тогда еще можно будет говорить о разумности вашего предложения.
Ага.. я, в свою очередь, предложу вам сплясать "цыганочку с выходом", чтобы появился повод поговорить о вашей разумности :-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 19:35)
| | Ну а что тогда лясы точить? И в 20 КБ не влезет такое, не то чтобы в 500 байт, так зачем туфту гнать. | |
|
|
|
|
|
|
|
для: sim5
(07.09.2008 в 19:46)
| | >И в 20 КБ не влезет такое
Какое "такое" не влезет?
Товарищ, вполне может быть, делает сайт о себе любимом.
В первом списке - страны, где он побывал.
Во втором - города этих стран, где ступала его нога.
Если фамилия топикстартера не Конюхов, то ему вполне хватит всего 0,5 килобайт.
>Ну а что тогда лясы точить?
Действительно - зачем чего-то там "точить"?
Ваша фраза "Лучше всего использовать AJAX" при НЕИЗВЕСТНЫХ вам условиях задачи полностью выдает в вас именно "точильщика" тех самых "ляс".
В общем, даю вам шанс "победить в споре".
РАЗРЕШАЮ вам написать сюда еще одно сообщение. И обещаю, что отвечать на него не буду.
Таким образом, последнее слово останется за вами.
Люди вашего типа всегда полагают, что в этом случае их точка зрения более верная и что именно они - "победители" :-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 20:24)
| | Люди вашего типа всегда полагают, что в этом случае их точка зрения более верная
Вы до двух считать умеете? Нас двое, а вы один.
Вобщем для выбора планет, стран, городов, улиц, домов, квартир, комнат (и т.д.) - лучше всего подходит AJAX. | |
|
|
|
|
|
|
|
для: Valick
(07.09.2008 в 22:19)
| | >Вы до двух считать умеете? Нас двое, а вы один
"Всё великое в мире совершалось только благодаря гению и твердости одного человека, борющегося против предрассудков большинства" (с) Ф. Вольтер
:-) | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 23:53)
| | Тьфу ты ну ты... чтож вы сразу не сказали))
P.S. Передавайте привет остальным Наполеонам ;) | |
|
|
|
|
|
|
|
для: Valick
(08.09.2008 в 00:00)
| | Ладно, давайте без наполеоники.
"Мерилом справедливости не может быть большинство голосов" (с) Ф. Шиллер | |
|
|
|
|
|
|
|
для: PAT
(08.09.2008 в 00:13)
| | Кто эти люди?
"Один в поле не воин" (с) русская пословица | |
|
|
|
|
|
|
|
для: Valick
(08.09.2008 в 00:16)
| | >Кто эти люди?
Вы не знаете Вольтера и Шиллера?
И даже Гугль не помог?
Блин... с кем приходится иметь дело... :-((
>"Один в поле не воин" (с) русская пословица
Охренеть...
Анекдот в тему:
Из спальни жена - мужу: Милый, ты скоро? Я тебя жду...
Муж отвечает: Погоди... тут в интернете кое-кто неправ... это очень важно... | |
|
|
|
|
|
|
|
для: PAT
(07.09.2008 в 20:24)
| | PAT, вы грамотный человек в области JS, никто и не спорит. Но все, что вы говорите о том где побывал втор, это лишь предположения ваши. Вопрос стоял о городах стран, и пусть это будет всего лишь две страны, это довольно приличный объем данных получается. Могу вам сказать, что я делаю свою базу данных регионогов России, и если вязть только ее города, то это уже не мало.
Я совсем не любитель безпредметных споров, и весь разговор ниже, это просто никчемная пальба словами. Я лишь говорю, если объем данных не велик, то естественно не стоит прибегать к каким-то технологиям, достаточно все передать на страницу. Что касается этого вопроса, то здесь целесообразно применить AJAX, хотя я для таких целей применяю IFRAME вкупе с DIV, вот и весь AJAX, причем без всяких проблем и глюков.
Что касается "победить в споре" - упаси господь, оставайтесь при своей точке зрения, на то он и форум, чтобы высказывать свою. | |
|
|
|