Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Формы
 
 автор: Mookapek   (06.09.2008 в 20:08)   письмо автору
 
 

Допустим, есть 2 поля формы типа select.
В первом поле выбирается страна, во втором город.
Как сделать так, чтобы список городов второго поля зависел от выбранной страны в первой форме.
Например, выбираю в первом поле Россию, во второй появляется список российских городов, выбираю США - список американских городов.
Как лучше это реализовать?
Спасибо!

   
 
 автор: coloboc66   (06.09.2008 в 23:29)   письмо автору
 
   для: Mookapek   (06.09.2008 в 20:08)
 

Массивами. Подробней - самому стало интересно - нужно будет подумать на досуге...

   
 
 автор: PAT   (07.09.2008 в 01:54)   письмо автору
 
   для: 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 
obj.options.length0j--) obj.options [j] = null;
for (var 
cit Cou [1].split ('='), t0cit.lengthj++)
   {
   
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>&nbsp;

<select name="myCities" style="display: none">
<option>Выберите город:</option>
</select>
...
</form>
</body>
</html>

*Внимательно прочтите

   
 
 автор: sim5   (07.09.2008 в 06:50)   письмо автору
 
   для: Mookapek   (06.09.2008 в 20:08)
 

Лучше всего использовать AJAX, хотя я использую для этого намного проще способ, ну это таже хня. По запросу первого селекта, получаем список второго, по второму третьего... и так можно до...

   
 
 автор: PAT   (07.09.2008 в 13:07)   письмо автору
 
   для: sim5   (07.09.2008 в 06:50)
 

>Лучше всего использовать AJAX

Да, использовать AJAX здесь можно.
Только вот полагать, что использовать AJAX - это всегда лучше, я бы не стал.

Лучшим AJAX может быть только в одном случае - если автору страницы необходимо сильно осложнить жизнь пользователю, попытавшемуся зачем-то получить из кода страницы сразу весь список всех городов всех перечисленных в первом списке стран.

Если же список стран будет содержать даже абсолютно ВСЕ ныне существующие на планете Земля гособразования, а во вторых списках будут появляться названия даже большинства городов каждой из этих стран, то даже тогда AJAX - излишество. Причём излишество - неудобное. Значительно удобнее юзеру один раз подождать лишних две-десять секунд при загрузке страницы, чтобы потом получать вторые списки мгновенно, чем сэкономить эти две-десять секунд при загрузке страницы, но потом всякий раз ожидать появления второго списка те же две-десять секунд.

   
 
 автор: sim5   (07.09.2008 в 13:29)   письмо автору
 
   для: PAT   (07.09.2008 в 13:07)
 

Если список выводимый на страницу будет содержать все страны и их города (а их не одна и не две), это и есть "усложнить жизнь пользователю". Что касается времени загрузки, то это спорный вопрос. Что касается динамического получения подчиненных списков - на многих сайтах где я это встречал, не вызывает больших проблем со временем. Да и вообще, я буду выводить этот список не для того, чтобы пользователь получил его, а конкретно для решения своих задач. А вот получение подобных баз, это уже совсем иное.

   
 
 автор: PAT   (07.09.2008 в 13:48)   письмо автору
 
   для: sim5   (07.09.2008 в 13:29)
 

Ваше мнение имеет право на существование.
Спорить не буду.

Гособразований (признанных и непризнанных стран) на планете Земля ныне насчитывается 258 штук.
Можно один раз достать из холодильника блюдо с 258-ю вишенками, поставить на стол и съесть их.
А можно и по-другому - бегать от стола к холодильнику и обратно ровно 258-ь раз, доставая из холодильника по одной вишенке.
Согласен - второй вариант лучше. Ожирения не будет точно :-)

   
 
 автор: Valick   (07.09.2008 в 14:05)   письмо автору
 
   для: PAT   (07.09.2008 в 13:48)
 

Можно один раз достать из холодильника блюдо с 258-ю вишенками
Вы уверены? а помоему как раз наоборот при каждом обращении к серверу "из холодильника" будут доставаться 258 вишенок, а съедать вы будете 2-3 штуки... остальные - в мусор!!!

   
 
 автор: PAT   (07.09.2008 в 14:18)   письмо автору
 
   для: Valick   (07.09.2008 в 14:05)
 

И с вами спорить не буду.
Ибо "на вкус и цвет товарищей нет".
Когда к вам приходят гости, вы выставляете на стол строго ограниченные пайки для каждого?
Как в тюрьме? Ни одной вишенкой больше?

AJAX ныне моден и ПОЭТОМУ многим нравится.
И многие его пользуют, не задумываясь о целесообразности.

Бывает.
Особено у тех, у кого вовсе нет дурной привычки о чём-то задумываться.

   
 
 автор: Valick   (07.09.2008 в 14:50)   письмо автору
 
   для: PAT   (07.09.2008 в 14:18)
 

Сейчас речь идёт не о моде, а о рациональности. Мне лично абсолютно без разници какие города есть в Гваделупе, а вы меня хотите этим нагрузить...
Если уж вам так не нравится Аякс (заметьте я сам ярый противник "завязывания" функциональности сайта на ЯвуСкрипт), то просто перегрузите страницу при выборе очередного селекта.

   
 
 автор: sim5   (07.09.2008 в 14:40)   письмо автору
 
   для: PAT   (07.09.2008 в 13:48)
 

Нет, если бы список предполагал небольшой набор, я бы конечно не использовал AJAX, а передал все это массивом в JS. Но список городов стран, это уже через чур, потому как придется все города всех стран сразу отдать на старницу. Ведь в противном случае потребуется перзагрузка всей страницы, при выборе другой страны. А значит лучше AJAX, ну или фрейм в простейшем случае.

   
 
 автор: PAT   (07.09.2008 в 15:14)   письмо автору
 
   для: sim5   (07.09.2008 в 14:40)
 

>если бы список предполагал небольшой набор, я бы конечно не использовал AJAX

Ну вот, как наконец-то выяснилось, весь вопрос в субъективном понимании - что есть "большой набор", а что есть "небольшой".
Для кого-то и полстакана пива - много, а кому-то и две бутылки водки мало.

Для меня главный критерий - удобство пользователя.
Поэтому, на мой взгляд, пользователю, зашедшему на страницу, много удобнее подождать один раз, и получить страницу, где второй список будет обновляться мгновенно.
Вы же предлагаете ему "немножко подождать" всякий раз, когда он захочет, например, сравнить какие-то условия для нескольких городов разных стран.

Название одного города - в среднем 7 символов плюс разделитель (т.е. 8 байт).
Пусть для одной страны - в среднем 100 городов (хотя есть страны всего с одним городом).
258 стран * 100 городов * 8 символов = 206,5 Кбайт.
При нынешних скоростях соединения - это одна секунда, три - максимум.

При использовании AJAXа вы сами будете ставить задержку попыток в полсекунды минимум.
Вот и прикиньте - сколько времени потратит пользователь, обратившийся при использовании вами AJAXa к пяти разным странам.

   
 
 автор: sim5   (07.09.2008 в 15:42)   письмо автору
 
   для: PAT   (07.09.2008 в 15:14)
 

Вашими бы устами да мед пить :) Ну зачем мерять скорость в сети по своей доступной? В больших городах Росии, это еще верно, но далеко не так в провинциях дело обстоит, да и цена за трафик приличная. Глубоко сомневаюсь, что все города всех стран уложаться в 206 КБ и что в серднем название это 7 символов, а если приплюсовать сюда еще и объем страницы, который тоже может быть весьма приличным...
Вы можете делать так, я ведь не говорю, что это не имеет место быть. А мне бы не хотелось надеятся, что кто-то готов длительно ждать.

   
 
 автор: PAT   (07.09.2008 в 17:19)   письмо автору
 
   для: sim5   (07.09.2008 в 15:42)
 

Приятно, когда оппонент так легко меняет свою точку зрения :-)

Поначалу написали, что "Лучше всего использовать AJAX"

А теперь уже - "Вы можете делать так, я ведь не говорю, что это не имеет место быть. А мне бы не хотелось надеятся, что кто-то готов длительно ждать."

Где-то, возможно, нужен AJAX.
Но много чаще рациональнее использовать иные способы.
Заявлять на голубом глазу - "AJAX форева!" - не надо :-)

   
 
 автор: sim5   (07.09.2008 в 17:27)   письмо автору
 
   для: PAT   (07.09.2008 в 17:19)
 

Я не меняю свою точку зрения в зависимости от погоды, это вы ошиблись. Но то, что загонять в массив нужное автору, кое никак в 206 КБ не поместится (тут вы явно маху дали), считают полным абсурдом. Если у всех ваших клиентов, по вашей версии, супер скорости в инете, причем дешовые, да заради бога, закачавайте, я разве против.

   
 
 автор: PAT   (07.09.2008 в 18:09)   письмо автору
 
   для: sim5   (07.09.2008 в 17:27)
 

>то, что загонять в массив нужное автору, кое никак в 206 КБ не поместится

Автор топика вообще-то всего о двух странах написал, что прекрасно уложится менее чем в 0,5 килобайта.
А вы уже выдумываете про то, что автору и двухсот килобайт не хватит...

Попытка "сохранить хорошую мину лица" при "плохой игре" вам явно не удалась :-)

   
 
 автор: sim5   (07.09.2008 в 18:17)   письмо автору
 
   для: PAT   (07.09.2008 в 18:09)
 

Я не знаю что в конечном итоге нужно автору, две страны или не две. Пусть делает как хочет, только не надо о плохой игре и мине. Коли вы завели разговор о разумности, то значит и надо говорить о разумности. Представьте все города США и России в размере 500 байт, тогда еще можно будет говорить о разумности вашего предложения.

   
 
 автор: PAT   (07.09.2008 в 19:35)   письмо автору
 
   для: sim5   (07.09.2008 в 18:17)
 

>Представьте все города США и России в размере 500 байт, тогда еще можно будет говорить о разумности вашего предложения.

Ага.. я, в свою очередь, предложу вам сплясать "цыганочку с выходом", чтобы появился повод поговорить о вашей разумности :-)

   
 
 автор: sim5   (07.09.2008 в 19:46)   письмо автору
 
   для: PAT   (07.09.2008 в 19:35)
 

Ну а что тогда лясы точить? И в 20 КБ не влезет такое, не то чтобы в 500 байт, так зачем туфту гнать.

   
 
 автор: PAT   (07.09.2008 в 20:24)   письмо автору
 
   для: sim5   (07.09.2008 в 19:46)
 

>И в 20 КБ не влезет такое

Какое "такое" не влезет?
Товарищ, вполне может быть, делает сайт о себе любимом.
В первом списке - страны, где он побывал.
Во втором - города этих стран, где ступала его нога.

Если фамилия топикстартера не Конюхов, то ему вполне хватит всего 0,5 килобайт.

>Ну а что тогда лясы точить?

Действительно - зачем чего-то там "точить"?
Ваша фраза "Лучше всего использовать AJAX" при НЕИЗВЕСТНЫХ вам условиях задачи полностью выдает в вас именно "точильщика" тех самых "ляс".

В общем, даю вам шанс "победить в споре".
РАЗРЕШАЮ вам написать сюда еще одно сообщение. И обещаю, что отвечать на него не буду.
Таким образом, последнее слово останется за вами.
Люди вашего типа всегда полагают, что в этом случае их точка зрения более верная и что именно они - "победители" :-)

   
 
 автор: Valick   (07.09.2008 в 22:19)   письмо автору
 
   для: PAT   (07.09.2008 в 20:24)
 

Люди вашего типа всегда полагают, что в этом случае их точка зрения более верная
Вы до двух считать умеете? Нас двое, а вы один.
Вобщем для выбора планет, стран, городов, улиц, домов, квартир, комнат (и т.д.) - лучше всего подходит AJAX.

   
 
 автор: PAT   (07.09.2008 в 23:53)   письмо автору
 
   для: Valick   (07.09.2008 в 22:19)
 

>Вы до двух считать умеете? Нас двое, а вы один

"Всё великое в мире совершалось только благодаря гению и твердости одного человека, борющегося против предрассудков большинства" (с) Ф. Вольтер
:-)

   
 
 автор: Valick   (08.09.2008 в 00:00)   письмо автору
 
   для: PAT   (07.09.2008 в 23:53)
 

Тьфу ты ну ты... чтож вы сразу не сказали))
P.S. Передавайте привет остальным Наполеонам ;)

   
 
 автор: PAT   (08.09.2008 в 00:13)   письмо автору
 
   для: Valick   (08.09.2008 в 00:00)
 

Ладно, давайте без наполеоники.

"Мерилом справедливости не может быть большинство голосов" (с) Ф. Шиллер

   
 
 автор: Valick   (08.09.2008 в 00:16)   письмо автору
 
   для: PAT   (08.09.2008 в 00:13)
 

Кто эти люди?
"Один в поле не воин" (с) русская пословица

   
 
 автор: PAT   (08.09.2008 в 01:01)   письмо автору
 
   для: Valick   (08.09.2008 в 00:16)
 

>Кто эти люди?

Вы не знаете Вольтера и Шиллера?
И даже Гугль не помог?

Блин... с кем приходится иметь дело... :-((


>"Один в поле не воин" (с) русская пословица

Охренеть...
Анекдот в тему:
Из спальни жена - мужу: Милый, ты скоро? Я тебя жду...
Муж отвечает: Погоди... тут в интернете кое-кто неправ... это очень важно...

   
 
 автор: sim5   (08.09.2008 в 05:48)   письмо автору
 
   для: PAT   (07.09.2008 в 20:24)
 

PAT, вы грамотный человек в области JS, никто и не спорит. Но все, что вы говорите о том где побывал втор, это лишь предположения ваши. Вопрос стоял о городах стран, и пусть это будет всего лишь две страны, это довольно приличный объем данных получается. Могу вам сказать, что я делаю свою базу данных регионогов России, и если вязть только ее города, то это уже не мало.
Я совсем не любитель безпредметных споров, и весь разговор ниже, это просто никчемная пальба словами. Я лишь говорю, если объем данных не велик, то естественно не стоит прибегать к каким-то технологиям, достаточно все передать на страницу. Что касается этого вопроса, то здесь целесообразно применить AJAX, хотя я для таких целей применяю IFRAME вкупе с DIV, вот и весь AJAX, причем без всяких проблем и глюков.
Что касается "победить в споре" - упаси господь, оставайтесь при своей точке зрения, на то он и форум, чтобы высказывать свою.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования