Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

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

 

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

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

тема: Dva Selecta
 
 автор: Okey   (19.07.2008 в 22:07)   письмо автору
 
 

zdrastvujete.


kto znajet kak sdelast select v kotorym elementy budut formitowatsja v zavisimosti od drugova selecta.

naprimer: oblast, i gorod.

   
 
 автор: PAT   (19.07.2008 в 22:35)   письмо автору
 
   для: Okey   (19.07.2008 в 22:07)
 

Nikak ne sdelat'.
Eto nevozmozhno v principe!

Takzhe kak i vam nel'zja pisat' kirillicei.

Nauchites' pisat' po-russki - ja srazu zhe nauchus' pomogat' vam s vashei problemoi.

   
 
 автор: Okey   (19.07.2008 в 22:50)   письмо автору
 
   для: PAT   (19.07.2008 в 22:35)
 

ок. извините ))
так можете помочь с этими селектами?

   
 
 автор: GeorgeIV   (21.07.2008 в 10:10)   письмо автору
 
   для: Okey   (19.07.2008 в 22:50)
 

В поиск. За последние две недели это как миниму два раза уже рассматривалось на форуме.

   
 
 автор: PAT   (21.07.2008 в 12:49)   письмо автору
 
   для: Okey   (19.07.2008 в 22:50)
 

Принцип один
на ПЕРВЫЙ селект навешивается функция по событию ONCHANGE, которая во ВТОРОМ селекте:
- формирует новые опшены методом createElement (),
- напрямую прописывает значения value и text новых опшенов ,
- новые опшены добавляет в коллекцию опшенов методом add (),
- ненужные опшены удаляет методом remove ()

Всё вышеизложенное в JS-виде выглядит приблизительно так:
<select id="first" onchange="myFunc (this.selectedIndex)">
...
<select id="second">
...
function myFunc (x)
{
...
var newOption = document.createElement ('option');
newOption.value = 'Значение_VALUE [в зависимости от x]';
newOption.text = 'Видимый_юзеру_текст_опшена [в зависимости от x]';
document.getElementById ('second').options.add (newOption);
...
document.getElementById ('second').options.remove (индекс_удаляемого_опшена [в зависимости от x])
}


Проблемой является получение данных (value и text) для опшенов ВТОРОГО селекта в зависимости от выбранного опшена в ПЕРВОМ селекте.
Способов решения этой "проблемы" масса - от простейшего прописывания скрипт-массивов (для незначительного количества вариантов) до работы через AJAX (при ОЧЕНЬ больших объемах).

Если немного помедитировать, то становится ясно, что в 99% случаях - даже при значительных объемах вариантов - предпочтительным является простейший способ, т.е. ИЗНАЧАЛЬНАЯ подгрузка ВСЕХ возможных вариантов в виде скрипт-массивов. Ибо неоднократное ожидание ответов от сервера ПО-ЛЮБОМУ превысит время, затраченное браузером при подгрузке всех вариантов в скриптовом виде сразу.

Простейший пример: два селекта, в первом - ДВА работающих опшена (из всего трёх), по выбору которых формируется второй селест:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=win-1251">
<script>
//пары value=text для второго селекта
var A = new Array ();
A [0] = 'red=красная|blue=синяя|yellow=желтая';
A [1] = 'mon=понедельник|tue=вторник|wed=среда|thu=четверг|fri=пятница|sat=суббота|sun=воскресенье';

//функция формирования второго селекта
function myFunc (x)
{
if (!x) {document.getElementById ('second').style.visibility = 'hidden'; return}
for (var j = document.getElementById ('second').options.length - 1; j >= 0; j--)
document.getElementById ('second').options.remove (j);

for (var obj = A [x - 1].split ('|'), j = 0; j < obj.length; j++)
   {
   var newOption = document.createElement ('option');
   var t = obj [j].split ('=');
   newOption.value = t [0];
   newOption.text = t [1];
   document.getElementById ('second').options.add (newOption);
   }
document.getElementById ('second').style.visibility = 'visible';
}
</script>
</head>
<body>
<select id="first" style="width: 200px" onchange="myFunc (this.selectedIndex)">
<option style="color: red">Выбери меня</option>
<option>птица счастья</option>
<option>завтрашнего дня</option>
</select>

<select id="second" style="visibility: hidden; width: 150px"></select>
</body>
</html>

   
Rambler's Top100
вверх

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