Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2011, 20:29
Интересующийся
Отправить личное сообщение для sega_z Посмотреть профиль Найти все сообщения от sega_z
 
Регистрация: 29.09.2010
Сообщений: 15

Как сделать сохранение списков 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>


В нём сохраняется последние выбранные значения селекта "регион" вместо пустых первых строк после перезагрузки формы.

Никак не можем сделать то же самое для селекта "города".
Если кто нибудь знает - помогите, пожалуйста!
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2011, 00:33
Аспирант
Отправить личное сообщение для kostr Посмотреть профиль Найти все сообщения от kostr
 
Регистрация: 12.09.2010
Сообщений: 98

Если я правильно поняла, это файл 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>
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2011, 12:26
Интересующийся
Отправить личное сообщение для sega_z Посмотреть профиль Найти все сообщения от sega_z
 
Регистрация: 29.09.2010
Сообщений: 15

Да....!!!!
Это то что надо!!!
Целый месяц не могли разобраться, облазили все форумы!
Но наконец то нашелся человек который хорошо разбирается в этом.
Большое человеческое спасибо вам!!!

Только есть ещё нюансы:

В массив $_GET['menu1'] и $_GET['menu2'] заносятся цифры, а желательно чтобы заносились названия городов и регионов, потому что форма используется для поиска из базы данных по названию регионов и городов.

Можно ли в данном коде сделать, так чтобы в массивах $_GET были сами названия, как задано в переменных?
Или нужно будет писать ещё код для перевода цифровых значений $_GET в названия (но это слишком трудоёмко, т.к. регионов будет 82 шт. и в каждом еще много городов)

Последний раз редактировалось sega_z, 14.05.2011 в 12:58.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2011, 20:48
Аспирант
Отправить личное сообщение для kostr Посмотреть профиль Найти все сообщения от kostr
 
Регистрация: 12.09.2010
Сообщений: 98

Ну вот так тогда:
<!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>
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2011, 22:21
Интересующийся
Отправить личное сообщение для sega_z Посмотреть профиль Найти все сообщения от sega_z
 
Регистрация: 29.09.2010
Сообщений: 15

Спасибо вам за помощь!!!
То что надо!!! Супер!

А сложно ли сделать в этом коде третий список, зависимый от второго (например "Регион" > "Город" > "Район")?
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2011, 22:40
Аспирант
Отправить личное сообщение для kostr Посмотреть профиль Найти все сообщения от kostr
 
Регистрация: 12.09.2010
Сообщений: 98

В принципе, можно сделать такую же обработку третьего селекта, как сейчас у второго. Но при таких размерах базы вам все же лучше подгружать аяксом, я думаю.
Ответить с цитированием
  #7 (permalink)  
Старый 15.05.2011, 00:04
Интересующийся
Отправить личное сообщение для sega_z Посмотреть профиль Найти все сообщения от sega_z
 
Регистрация: 29.09.2010
Сообщений: 15

Полностью согласен с вами, но я не знаю как это сделать. Я вообще с таким скриптами только на "вы".
Да и база для трёх списков будет в принципе не большая (это я просто объяснил на примере регионов, городов и районов).
Я очень вас прошу, помогите пожалуйста доработать этот код для трех списков, чтобы так же сохранялись все три выбранных значения и в массиве $_GET были сами названия?

Последний раз редактировалось sega_z, 15.05.2011 в 00:07.
Ответить с цитированием
  #8 (permalink)  
Старый 15.05.2011, 16:00
Аспирант
Отправить личное сообщение для kostr Посмотреть профиль Найти все сообщения от kostr
 
Регистрация: 12.09.2010
Сообщений: 98

Ну хорошо, вот вариант для 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>
Ответить с цитированием
  #9 (permalink)  
Старый 15.05.2011, 18:01
Интересующийся
Отправить личное сообщение для sega_z Посмотреть профиль Найти все сообщения от sega_z
 
Регистрация: 29.09.2010
Сообщений: 15

Вы не представляете себе, как я вам благодарен!!!
Да, это была последняя моя просьба. Теперь вроде все проблемы решены, дальше я разберусь сам.

JS я пробовал изучать, но как то я его не понимаю, да и времени нет на его глубокое изучение. Специалиста нанимать - нет денег, мой проект ещё только в разработке, доходов пока не приносит...

Очень был рад общению, всего вам наилучшего в жизни ... СПАСИБО!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать сохранение значений списков select sega_z Ваши сайты и скрипты 2 12.05.2011 18:16
Как лучше сделать виджет? comentator Элементы интерфейса 0 25.03.2011 08:44
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Сделать видимым select... Anneta Элементы интерфейса 7 12.01.2011 21:21
Как сделать? При выходе мышкой за пределы окна браузера, начинает грузится другая стр alb Events/DOM/Window 13 01.09.2010 12:19