Как сделать сохранение списков select?
Есть обычный рабочий код динамических селектов формы "form1":
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language="JavaScript"> dir = new Array() dir[1] = new Array() dir[1][0]=new dir_qrec("","") dir[1][1]=new dir_qrec("Апрелевка","Апрелевка") dir[1][2]=new dir_qrec("Балашиха","Балашиха") dir[1][3]=new dir_qrec("Бронницы","Бронницы") dir[2] = new Array() dir[2][0]=new dir_qrec("","") dir[2][1]=new dir_qrec("Арамиль","Арамиль") dir[2][2]=new dir_qrec("Артемовский","Артемовский") dir[2][3]=new dir_qrec("Асбест","Асбест") dir[3] = new Array() dir[3][0]=new dir_qrec("","") dir[3][1]=new dir_qrec("Александровск","Александровск") dir[3][2]=new dir_qrec("Березники","Березники") dir[3][3]=new dir_qrec("Верещагино","Верещагино") 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" action="3.php" method="GET" onSubmit="this.si.value=this.menu1.selectedIndex"> <input type="hidden" name="si" value="0"> <?php $arr = array ('', 'Московская область', 'Свердловская область', 'Пермский край'); $response = '<select name="menu1">'; for ($i=0; $i<count($arr); $i++){ if($i==$_GET['si']) $response .= '<option value="'.$arr[$i].'" selected="selected">'.$arr[$i].'</option>'; else $response .= '<option value="'.$arr[$i].'">'.$arr[$i].'</option>'; } $response .= '</select>'; print $response; ?> <br> <select name="menu2" onChange=""> <script language="JavaScript"> <!-- show_subs(); //-> </script> </select> <br> <input name="search" type="submit" class="knopka" title="Найти" value="Найти"> </form> </body> </html> В нём сохраняется последние выбранные значения селекта "регион" вместо пустых первых строк после перезагрузки формы. Никак не можем сделать то же самое для селекта "города". Если кто нибудь знает - помогите, пожалуйста! |
Если я правильно поняла, это файл 3.php и есть?
Вот так тогда попробуйте: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language="JavaScript"> dir = new Array() dir[1] = new Array() dir[1][0]=new dir_qrec("","") dir[1][1]=new dir_qrec("Апрелевка","Апрелевка") dir[1][2]=new dir_qrec("Балашиха","Балашиха") dir[1][3]=new dir_qrec("Бронницы","Бронницы") dir[2] = new Array() dir[2][0]=new dir_qrec("","") dir[2][1]=new dir_qrec("Арамиль","Арамиль") dir[2][2]=new dir_qrec("Артемовский","Артемовский") dir[2][3]=new dir_qrec("Асбест","Асбест") dir[3] = new Array() dir[3][0]=new dir_qrec("","") dir[3][1]=new dir_qrec("Александровск","Александровск") dir[3][2]=new dir_qrec("Березники","Березники") dir[3][3]=new dir_qrec("Верещагино","Верещагино") function dir_qrec(subname,subid){ this.subname=subname this.subid=subid return this } function show_subs(new_reg) { var k=document.form1.menu1.selectedIndex var listObj=document.form1.menu2 listObj.length=0 if (new_reg) sel = 0; else sel = <?php echo $_GET['menu2']? (int)$_GET['menu2'] : 0; echo";\n" ?> for (var j=0; j<dir[k].length; j++) { listObj.options[j]=new Option(dir[k][j].subname, j) } listObj.options[sel].selected=true } </script> </head> <body> <form name="form1" action="" method="GET"> <?php $arr = array ('', 'Московская область', 'Свердловская область', 'Пермский край'); $response = '<select name="menu1" onChange="show_subs(true)">'; for ($i=0; $i<count($arr); $i++){ if($i==$_GET['menu1']) $response .= '<option value="'.$i.'" selected="selected">'.$arr[$i].'</option>'; else $response .= '<option value="'.$i.'">'.$arr[$i].'</option>'; } $response .= '</select>'; print $response; ?> <br> <select name="menu2"> <script language="JavaScript"> <!-- show_subs(false); //-> </script> </select> <br> <input name="search" type="submit" class="knopka" title="Найти" value="Найти"> </form> </body> </html> |
Да....!!!!
Это то что надо!!! Целый месяц не могли разобраться, облазили все форумы! Но наконец то нашелся человек который хорошо разбирается в этом. Большое человеческое спасибо вам!!! :victory: Только есть ещё нюансы: В массив $_GET['menu1'] и $_GET['menu2'] заносятся цифры, а желательно чтобы заносились названия городов и регионов, потому что форма используется для поиска из базы данных по названию регионов и городов. Можно ли в данном коде сделать, так чтобы в массивах $_GET были сами названия, как задано в переменных? Или нужно будет писать ещё код для перевода цифровых значений $_GET в названия (но это слишком трудоёмко, т.к. регионов будет 82 шт. и в каждом еще много городов) |
Ну вот так тогда:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language="JavaScript"> dir = new Array() dir[1] = new Array() dir[1][0]=new dir_qrec("","") dir[1][1]=new dir_qrec("Апрелевка","Апрелевка") dir[1][2]=new dir_qrec("Балашиха","Балашиха") dir[1][3]=new dir_qrec("Бронницы","Бронницы") dir[2] = new Array() dir[2][0]=new dir_qrec("","") dir[2][1]=new dir_qrec("Арамиль","Арамиль") dir[2][2]=new dir_qrec("Артемовский","Артемовский") dir[2][3]=new dir_qrec("Асбест","Асбест") dir[3] = new Array() dir[3][0]=new dir_qrec("","") dir[3][1]=new dir_qrec("Александровск","Александровск") dir[3][2]=new dir_qrec("Березники","Березники") dir[3][3]=new dir_qrec("Верещагино","Верещагино") function dir_qrec(subname,subid){ this.subname=subname this.subid=subid return this } function show_subs(new_reg) { var k=document.form1.menu1.selectedIndex var listObj=document.form1.menu2 listObj.length=0 if (new_reg) sel = 0; else sel = <?php echo $_GET['si2']? (int)$_GET['si2'] : 0; echo";\n" ?> for (var j=0; j<dir[k].length; j++) { listObj.options[j]=new Option(dir[k][j].subname, dir[k][j].subid) } listObj.options[sel].selected=true } function subm() { document.form1.si1.value = document.form1.menu1.selectedIndex; document.form1.si2.value = document.form1.menu2.selectedIndex; } </script> </head> <body> <form name="form1" action="" method="GET" onSubmit="subm()"> <input type="hidden" name="si1" value="0"> <input type="hidden" name="si2" value="0"> <?php $arr = array ('', 'Московская область', 'Свердловская область', 'Пермский край'); $response = '<select name="menu1" onChange="show_subs(true)">'; for ($i=0; $i<count($arr); $i++){ if($i==$_GET['si1']) $response .= '<option value="'.$arr[$i].'" selected="selected">'.$arr[$i].'</option>'; else $response .= '<option value="'.$arr[$i].'">'.$arr[$i].'</option>'; } $response .= '</select>'; print $response; ?> <br> <select name="menu2"> <script language="JavaScript"> <!-- show_subs(false); //-> </script> </select> <br> <input name="search" type="submit" class="knopka" title="Найти" value="Найти"> </form> </body> </html> |
Спасибо вам за помощь!!!
То что надо!!! Супер! А сложно ли сделать в этом коде третий список, зависимый от второго (например "Регион" > "Город" > "Район")? |
В принципе, можно сделать такую же обработку третьего селекта, как сейчас у второго. Но при таких размерах базы вам все же лучше подгружать аяксом, я думаю.
|
Полностью согласен с вами, но я не знаю как это сделать. Я вообще с таким скриптами только на "вы".
Да и база для трёх списков будет в принципе не большая (это я просто объяснил на примере регионов, городов и районов). Я очень вас прошу, помогите пожалуйста доработать этот код для трех списков, чтобы так же сохранялись все три выбранных значения и в массиве $_GET были сами названия? |
Ну хорошо, вот вариант для 3 списков. Только давайте на этом закончим, если вам нужен Javascript, или учите, или нанимайте специалиста.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language="JavaScript"> dir = new Array() dir[1] = new Array() dir[1][0] = "" dir[1][1] = "Апрелевка" dir[1][2] = "Балашиха" dir[1][3] = "Бронницы" dir[2] = new Array() dir[2][0] = "" dir[2][1] = "Арамиль" dir[2][2] = "Артемовский" dir[2][3] = "Асбест" dir[3] = new Array() dir[3][0] = "" dir[3][1] = "Александровск" dir[3][2] = "Березники" dir[3][3] = "Верещагино" rai = new Array() rai[1] = new Array() rai[1][0] = new Array("") rai[1][1] = new Array("", "первый", "второй", "третий") rai[1][2] = new Array("", "первый", "второй", "третий") rai[2] = new Array() rai[2][0] = new Array("") rai[2][2] = new Array("", "первый", "второй", "третий") rai[3] = new Array() rai[3][0] = new Array("") rai[3][1] = new Array("", "первый", "второй", "третий") function show_subs(new_reg) { var k=document.form1.menu1.selectedIndex var listObj=document.form1.menu2 listObj.length=0 if (new_reg) sel = 0; else sel = <?php echo $_GET['si2']? (int)$_GET['si2'] : 0; echo";\n" ?> for (var j=0; j<dir[k].length; j++) { listObj.options[j]=new Option(dir[k][j], dir[k][j]) } listObj.options[sel].selected=true show_rais(true) } function show_rais(new_gor) { var k=document.form1.menu1.selectedIndex var j=document.form1.menu2.selectedIndex var listObj=document.form1.menu3 listObj.length=0 if (new_gor) sel = 0; else sel = <?php echo $_GET['si3']? (int)$_GET['si3'] : 0; echo";\n" ?> for (var i=0; i<rai[k][j].length; i++) { listObj.options[i]=new Option(rai[k][j][i], rai[k][j][i]) } listObj.options[sel].selected=true } function subm() { document.form1.si1.value = document.form1.menu1.selectedIndex; document.form1.si2.value = document.form1.menu2.selectedIndex; document.form1.si3.value = document.form1.menu3.selectedIndex; } </script> </head> <body> <form name="form1" action="" method="GET" onSubmit="subm()"> <input type="hidden" name="si1" value="0"> <input type="hidden" name="si2" value="0"> <input type="hidden" name="si3" value="0"> <?php $arr = array ('', 'Московская область', 'Свердловская область', 'Пермский край'); $response = '<select name="menu1" onChange="show_subs(true)">'; for ($i=0; $i<count($arr); $i++){ if($i==$_GET['si1']) $response .= '<option value="'.$arr[$i].'" selected="selected">'.$arr[$i].'</option>'; else $response .= '<option value="'.$arr[$i].'">'.$arr[$i].'</option>'; } $response .= '</select>'; print $response; ?> <br> <select name="menu2" onChange="show_rais(true)"> <script language="JavaScript"> <!-- show_subs(false); //-> </script> </select> <br> <select name="menu3"> <script language="JavaScript"> <!-- show_rais(false); //-> </script> </select> <br> <input name="search" type="submit" class="knopka" title="Найти" value="Найти"> </form> </body> </html> |
Вы не представляете себе, как я вам благодарен!!!
Да, это была последняя моя просьба. Теперь вроде все проблемы решены, дальше я разберусь сам. JS я пробовал изучать, но как то я его не понимаю, да и времени нет на его глубокое изучение. Специалиста нанимать - нет денег, мой проект ещё только в разработке, доходов пока не приносит... Очень был рад общению, всего вам наилучшего в жизни ... СПАСИБО!!! |
Часовой пояс GMT +3, время: 13:23. |