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

HTML+CSS+JavaScript

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

 

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

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

тема: Двойной <select>
 
 автор: JIEXA   (27.01.2006 в 22:45)   письмо автору
 
 

Вообщем надо сделать динамический <select>, тоесть сначало я в первом селекте выбераю что-то и взавимости от того, что я выбрал отображается другой селект. Вот как на знакомствах http://love.otvali.ru там сначало выбераешь страну, а потом динамически подгружается город.

   
 
 автор: codexomega   (28.01.2006 в 08:29)   письмо автору
 
   для: JIEXA   (27.01.2006 в 22:45)
 

http://softtime.ru/forum/read.php?id_forum=4&id_theme=7798&page=2

   
 
 автор: JIEXA   (28.01.2006 в 08:51)   письмо автору
 
   для: codexomega   (28.01.2006 в 08:29)
 

Да, спасибо. По ссылке я нашел решение:

<html> 
<head> 
<script language="JavaScript"> 
dir = new Array() 

dir[0] = new Array() 
dir[0][0]=new dir_qrec("","") 

dir[1] = new Array() 
dir[1][0]=new dir_qrec("sub1_1","value1_1") 
dir[1][1]=new dir_qrec("sub1_2","value1_2") 

dir[2] = new Array() 
dir[2][0]=new dir_qrec("sub2_1","value2_1") 
dir[2][1]=new dir_qrec("sub2_2","value2_2") 
dir[2][2]=new dir_qrec("sub2_3","value2_3") 

function dir_qrec(subname,subid){ 
    this.subname=subname 
    this.subid=subid 
    return this 


function show_subs() 

var k=document.form1.menu1.selectedIndex 
var listObj=document.form1.menu2 
listObj.length=0 
for (var j=0; j<dir[k].length; j++) 
    { 
    listObj.options[j]=new Option(dir[k][j].subname) 
    document.form1.menu2.options[j].value=dir[k][j].subid 
    } 
listObj.options[0].selected=true 

</script> 
</head> 

<body> 
<form name="form1"> 
  <select name="menu1" onChange="show_subs();"> 
    <option selected>unnamed1</option> 
    <option>unnamed2</option> 
    <option>unnamed3</option> 
  </select> 
  <br> 
  <select name="menu2" onChange=""> 
<option></option> 
</select> 
</form> 
</body> 
</html>


Только мне надо, чтобы подгружались файлы, а не заранее было определено. Вообщем как на http://love.otvali.ru

   
 
 автор: JIEXA   (28.01.2006 в 17:14)   письмо автору
 
   для: JIEXA   (28.01.2006 в 08:51)
 

Плз подскажите

   
 
 автор: cheops   (28.01.2006 в 21:21)   письмо автору
 
   для: JIEXA   (27.01.2006 в 22:45)
 

Решение вы сможете найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=7586

   
 
 автор: JIEXA   (29.01.2006 в 00:29)   письмо автору
 
   для: cheops   (28.01.2006 в 21:21)
 

Угу спасибо, только вроде бы на http://love.otvali.ru не перезагружается страница.
Хотя меня устраевает данное решение, но все таки если есть решение, чтобы страницы не перезагружалась, то я был бы очень благодарен.
Вот код, который я нашел в теме по вашей ссылке:

<form name="form" method="post" action="abc.php"> 
    <select name="select"  onchange='this.form.submit()'> 
      <option value="ru">Россия</option> 
      <option value="ua">Украина</option> 
    </select> 
    <?php 
      $query 
""
      if(
$POST['select'] == 'ru'$query "SELECT * FROM region WHERE country = 'ru'"
      if(
$POST['select'] == 'ua'$query "SELECT * FROM region WHERE country = 'ua'"
      if(!empty(
$query)) 
      { 
        
$reg mysql_query($query); 
        if(!
$reg) exit(mysql_error()); 
        
// Если имеется хотя бы одно значение 
        // формируем select 
        
if(mysql_num_rows($reg) > 0
        { 
          echo 
"<select name=region>"
          while(
$region mysql_fetch_array($reg)) 
          { 
            echo 
"<option value=$region[id]>$region[name]</option>"
          } 
          echo 
"</select>"
        } 
      } 
    
?> 
</form>

   
 
 автор: cheops   (29.01.2006 в 15:03)   письмо автору
 
   для: JIEXA   (29.01.2006 в 00:29)
 

Посмотрите код в аттаче

   
 
 автор: JIEXA   (29.01.2006 в 18:08)   письмо автору
 
   для: cheops   (29.01.2006 в 15:03)
 

Да нет :)))) Вы немного не поняли меня. Мне надо, чтобы все <option> не были определены заранее. Короче вот у меня есть код:
<select name="char">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
<!-- И и т.д. по алфавиту -->
</select>

И вот к примеру я выбераю в селекте букву D, и ява скрипт обращается к другому скрипту (generator.php?char=D) и тот скрипт выдает все записи на букву D, в тоже время ява скрипт генерирует новый <select> со всеми этими записями. Вы посмотрите на http://love.otvali.ru сначало выбераешь страну, затем генерируется список всех городов этой страны. Это все я делаю, чтобы уменьшить размер страницы, так как записей будет больше 5 тысяч на каждую букву...

   
 
 автор: 12345   (29.01.2006 в 23:35)   письмо автору
 
   для: JIEXA   (29.01.2006 в 18:08)
 

Если хочется генерировать селект, то есть метод добавления option в select -


(цитата)
Add() NN n/a IE 4 DOM n/a

add(element, [index])

Добавляет уже созданный элемент (от метода createElement()) к текущей коллекции. Элемент должен иметь тип OPTION. По умолчанию, если Вы не определите индексное значение как второй параметр, новый элемент добавляется как последний элемент коллекции. Следующая последовательность добавляет в конец массива объекта SELECT новый элемент :


var newElem = document.createElement("OPTION") newElem.text = "Freddy" newElem.value = "Freddy Mercury" document.forms[1].rockers.options.add(newElem)


Обратите внимание, что сначала создаётся объект newElem. Затем его свойства наполняются значениями. Затем новый элемент физически добавляется к элементу SELECT.

В Navigator <= 4 процесс добавления элемента OPTION полностью отличен. Чтобы добавить в конец новый элемент, назначите его как результат конструктора Option( ) последнему индексу массива (соответствующему целому числу, возвращенному свойством length). Параметры для функции конструктора (по порядку):

Строка, соответствующая свойству text

Строка, соответствующая свойству value

Булева переменная, соответствующая свойству defaultSelected

Булева переменная, соответствующая свойству selected

Например, версия для Navigator предшествующего примера (для IE):

document.forms[1].rockers.options[length] = new Option("Freddy", "Freddy Mercury", false, false)

Вы можете вставлять новый элемент где-нибудь в другом месте в списке, определяя желательное индексное значение массива options.


Возвращаемое значение
None.

Параметры
element Полностью сформированная ссылка на объект, обычно генерируемая методом createElement().
index Дополнительное целое число, указывающее, куда новый элемент должен быть помещен в массиве.
(/цитата)
Как оно сейчас для Gecko - не знаю, см. в док.
Обнулять селект можно по обнулению его innerHTML; вносить таким способом options не получится.

----------------------

Есть альтернатива, которую легче верстать, проверять и заносить из базы. Если генерировать селект в JS не надо, создаёте ряд заготовок вторых селектов с display:none, а по выбору первого селекта открываете нужный второй.

   
 
 автор: JIEXA   (30.01.2006 в 01:10)   письмо автору
 
   для: 12345   (29.01.2006 в 23:35)
 

Я вообще не знаю JS :( Если не трудно, можно мне примерчик?

   
 
 автор: 12345   (30.01.2006 в 13:00)   письмо автору
 
   для: JIEXA   (30.01.2006 в 01:10)
 

Как раз здесь разбирали свежий пример 2-го метода решения: http://forum.vingrad.ru/index.php?showtopic=81356. Нечто подобное было и на этом форуме, но не помню, был ли пример.

   
 
 автор: JIEXA   (30.01.2006 в 17:39)   письмо автору
 
   для: 12345   (30.01.2006 в 13:00)
 

Неее ну не то :( ну блин :( Как же мне объяснить.

Мне надо, чтобы после выбора первого селекта подгружался второй... Сейчас покажу примерный код:


<form method=post>
Выберите букву 
<select name=char>
<option value="А">А</option>
<option value="Б">Б</option>
<option value="В">В</option>
<option value="Г">Г</option>
<option value="Д">Д</option>
<option value="Ж">Ж</option>
<option value="З">З</option>
</select>

<!-- тут JS, который работает сразу же как только выбрали в первом селекте букву 
Этот JS делает запрос к примеру к файлу artists_list.php?char=тут_выбраная_буква_в_первом_селекте 
И скрипт artists_list.php отдает JS скрипту новый селект с артистами. И мы его выводим пользователю. Это все надо без перезагрузки страницы -->
</form>


Плз пожалуйста помогите, мне проект надо сдавать, а я запоролся на этом моменте, так как совсем незнаю JS.

   
 
 автор: 12345   (30.01.2006 в 18:56)   письмо автору
 
   для: JIEXA   (30.01.2006 в 17:39)
 

Понятно, что не то - я как пример привёл. Подгрузка описанная делается в AJAX-приложениях через xmlhttprequest - http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=12197 . Опера 8.01 неполноценно поддерживает этот метод, а, например, в 7.54 данный пример не работает. Поэтому тебе нужно согласовать задачу с поддержкой версий. Есть метод (кроме фреймов), поддерживающий Оперу от 7-й версии.

Вот то, что ты предлагаешь, тянет на 20$, если кто-то согласится бесплатно разобраться с твоей БД, у вас быстро найдётся взаимопонимание, и за полдня сделает. Тут есть желающие подработать - вмиг возьмутся.

   
 
 автор: JIEXA   (30.01.2006 в 21:56)   письмо автору
 
   для: 12345   (30.01.2006 в 18:56)
 

Нет можно без них, посмотрите не знакомствах там вообще вроде сам скрипт выборки пару строк занимает. Ладно буду ждать ответа cheops'a. Он думаю сможет помочь ;). Вам тоже спасибо )

   
 
 автор: 12345   (30.01.2006 в 23:06)   письмо автору
 
   для: JIEXA   (30.01.2006 в 21:56)
 

посмотрел главную страницу - там скрипт из 4 функций 120 строк занимает, организовано методом подгрузки фрейма
<iframe id="data_frame" src="" width="0" height="0"></iframe>  

...

function dg_ForceUpdate(type, lang)
{
    this.UplType = type;
    var country = anketa.elements[this.country_el].options[anketa.elements[this.country_el].selectedIndex].value;
    for (i = anketa.elements[this.town_el].options.length - 1; i >= 1 ; i--)
            anketa.elements[this.town_el].options.remove(i);
    anketa.elements[this.town_el].disabled = true;
    if (type == 1)
    {
        if (country == 0)
        {
            for (i = anketa.elements[this.region_el].options.length - 1; i >= 1 ; i--)
                    anketa.elements[this.region_el].options.remove(i);
            anketa.elements[this.region_el].disabled = true;
            anketa.elements[this.town_el].disabled = true;
            return;
        }
        for (i = anketa.elements[this.region_el].options.length - 1; i >= 1 ; i--)
                anketa.elements[this.region_el].options.remove(i);
//        anketa.elements[this.region_el].disabled = true;

        data_frame.location.href = "/?a=geo&fs=reg_" + country;
        this.CheckDataLoaded();
    }
    else
    {
        var region = anketa.elements[this.region_el].options[anketa.elements[this.region_el].selectedIndex].value;
        if (region == 0)
            anketa.elements[this.town_el].disabled = true;
        else
        {
            data_frame.location.href = "/?a=geo&fs=cities_" + region;
            this.CheckDataLoaded();
        }
    }    
}
далее, эта функция вызывает один или другой тип городов (видимо, "Россия" и "прочие...").
dg_AddOption - занимается созданием строки опций.
dg_CheckDataLoaded - проверка и цикл загрузки опций (option - тегов).

Эту цифру я назвал как самую оптимистичную, с учётом, что человек полдела сделает из интереса.

   
 
 автор: JIEXA   (31.01.2006 в 08:30)   письмо автору
 
   для: 12345   (30.01.2006 в 23:06)
 

Спасибо, я сейчас в школу ухожу, но как приду, буду пробывать вырвать остальной JS код. Если у кого-нибудь получится вырвать, то киньте код сюда в тему. (как я нелюблю JS :)))

   
 
 автор: JIEXA   (31.01.2006 в 18:56)   письмо автору
 
   для: 12345   (30.01.2006 в 23:06)
 

Блин рыл рыл в итоге не получилось... плз дайте готовый код, если не трудно конечно же...

   
 
 автор: JIEXA   (31.01.2006 в 23:30)   письмо автору
 
   для: JIEXA   (31.01.2006 в 18:56)
 

Всё нимагу я умераю, блин да кто придумал такой дуратский синтаксис JS - вообще никак нимагу в нем разобратся толком. Кто нить помогите мне пожалуйста, я же не один тут на форуме :((((((.

Я уже алгоритм работы скрипта выучил...

1. Сначало выбераем значение в первом селекте, второй селект в это время не активен.
2. Когда выбрали значение, идет запрос через iframe к примеру к optiongen.php?id=тут_значения_выбора_первого_селекта
3. optiongen.php выдает все значения для этого id к примеру в ввиде
<script language="javascript">
addoption('название', 'значение');
addoption('название 2', 'значение 2');
addoption('название 3', 'значение 3');
addoption('название 4', 'значение 4');
addoption('название 5', 'значение 5');
addoption('название 6', 'значение 6');
addoption('название 7', 'значение 7');
</script>

И теперь все эти option добавляются во второй селект. Тем кто знает JS это дело 5-10 минут, разве так трудно помочь?

   
 
 автор: JIEXA   (01.02.2006 в 20:58)   письмо автору
 
   для: JIEXA   (31.01.2006 в 23:30)
 

HEEEEEEEEEEEEEEEELP

   
 
 автор: JIEXA   (01.02.2006 в 22:21)   письмо автору
 
   для: JIEXA   (01.02.2006 в 20:58)
 

Ладно все пофиг, пойду вешатся... Всю жизнь мне не везет, с девушкой расстался, скрипт какой-то ищу уже почти неделю, в школе проблемы. Всё - вешаюсь!!!

   
 
 автор: 12345   (02.02.2006 в 00:54)   письмо автору
 
   для: JIEXA   (01.02.2006 в 22:21)
 

Это в отдел "разное", там могут верёвку хорошую посоветовать

   
 
 автор: JIEXA   (02.02.2006 в 14:29)   письмо автору
 
   для: 12345   (02.02.2006 в 00:54)
 

:D

   
 
 автор: Sulla   (03.02.2006 в 12:22)   письмо автору
 
   для: JIEXA   (02.02.2006 в 14:29)
 

вот сюда загляни

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=75

сам искал долго подобную штуку)

   
 
 автор: JIEXA   (03.02.2006 в 17:17)   письмо автору
 
   для: Sulla   (03.02.2006 в 12:22)
 

Спасибо что откликнулись, но тут сразу все данные грузятся в хтмл, а мне надо, чтобы данные подгружались после выбора в первом селекте

   
 
 автор: JIEXA   (07.02.2006 в 23:45)   письмо автору
 
   для: JIEXA   (03.02.2006 в 17:17)
 

Нашел!!!!!!!!!!! http://ajax.zervaas.com.au/examples/CountryRegionCityJax/

зы: русские никогда не сдаются!!!!

   
 
 автор: sulla   (08.02.2006 в 22:40)   письмо автору
 
   для: JIEXA   (07.02.2006 в 23:45)
 

внимательно читаем: http://1ya.ru/?action=viewUseful&id=16

и выкидываем нафиг ajax =)

   
Rambler's Top100
вверх

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