|
|
|
| Для вывода зависимых списков select методом JS мне посоветовали тему http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=992.
Вот сам пример, немного измененный мной:
<!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[0] = new Array()
dir[0][0]=new dir_qrec("Апрелевка","Апрелевка")
dir[0][1]=new dir_qrec("Балашиха","Балашиха")
dir[0][2]=new dir_qrec("Бронницы","Бронницы")
dir[1] = new Array()
dir[1][0]=new dir_qrec("Арамиль","Арамиль")
dir[1][1]=new dir_qrec("Артемовский","Артемовский")
dir[1][2]=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("Верещагино","Верещагино")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs1()
{
for (var l=0;l<dir[0].length;l++)
{
document.write("<option value='"+dir[0][l].subid+"'>"+dir[0][l].subname+"</option>")
}
}
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 value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>
|
Скрипт как раз то что мне нужно (работает во всех браузерах), но в нем есть недоработки, которые я не могу устранить:
1) При обновлении страницы сохраняется значение первого списка, а во втором списке всегда выходит значение строки dir[0][0]=new dir_qrec("Апрелевка","Апрелевка"), не зависимо какой <option> выбран в первом списке.
Мне кажется, что нужно доработать function show_subs1() | |
|
|
|
|
|
|
|
для: sega_z
(08.05.2011 в 21:25)
| | >Мне кажется, что нужно доработать function show_subs1()
Нет, нужно вместо show_subs1() вызывать show_subs() - она как раз эту задачу решает. | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 21:49)
| | Да, действительно! Спасибо!
Т.е. функцию function show_subs1() вообще я вообще удаляю. | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 21:49)
| | Хотел сделать, чтобы все первые строки обоих полей были пустыми, но что то не получилось?
Поле города в регионе "Пермский край" оказалось вообще пустым!!!
Что не так?
<!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[0] = new Array()
dir[0][0]=new dir_qrec("","")
dir[0][1]=new dir_qrec("Апрелевка","Апрелевка")
dir[0][2]=new dir_qrec("Балашиха","Балашиха")
dir[0][3]=new dir_qrec("Бронницы","Бронницы")
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("Верещагино","Верещагино")
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 value=""></option>
<option value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs();
//->
</script>
</select>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 21:49)
| | У вас в массиве dir первый ключ определяет номер option в первом списке, поэтому если что-то добавляете, нужно смещать значение на единицу.
<!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">
<select name="menu1" onChange="show_subs();">
<option value=""></option>
<option value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs();
//->
</script>
</select>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 23:24)
| | Хорошо, спасибо!
И еще один нужный момент - как вместо пустых значений массивов dir[1][0]=new dir_qrec("","") и т.д. добавить определенную переменную, которая может быть пустой (например @$gorod или @$_GET [gorod ]).
Это необходимо, чтобы последние выбранные значения "value" полей остались на экране (чтобы не вводить повторно, в случае редактирования формы). | |
|
|
|
|
|
|
|
для: sega_z
(09.05.2011 в 00:25)
| | Первому параметру функции dir_qrec() передайте какое-нибудь уникальное значение, а второй параметр, который отображается в option оставляйте пустым. | |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 00:39)
| | Не много не понял, покажите пожалуйста на примере данного кода. | |
|
|
|
|
|
|
|
для: sega_z
(09.05.2011 в 00:42)
| | Имеется в виду что-то вроде этого (если я правильно понял, что требуется)
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("Верещагино","Верещагино")
|
| |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 00:44)
| | Нет это совсем не то - при использовании последнего изменения в поле регион и в поле город отображается регион.
Нужно чтобы в форме, после нажатия кнопки SUBMIT, после перезагрузки и обработки значений формы оставались (отображались) последние выбранные значения город в поле город, регион в поле регион.
Вот что то типа такого:
<!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("<?php echo @$_GET['menu2'] ?>","<?php echo @$_GET['menu2'] ?>")
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("<?php echo @$_GET['menu2'] ?>","<?php echo @$_GET['menu2'] ?>")
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("<?php echo @$_GET['menu2'] ?>","<?php echo @$_GET['menu2'] ?>")
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">
<select name="menu1" onChange="show_subs();">
<option value="<?php echo @$_GET['menu1'] ?>"><?php echo @$_GET['menu1'] ?></option>
<option value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<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 - это моя страница с данным кодом (она же обработчик)
Проблема в том, что при нажатии на кнопку SUBMIT сохраняется только регион, а город остаётся пустым!!!
Попробуйте работу данного скрипта у себя и вы увидите ... | |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 00:44)
| | Да, кончено, нужно использовать второй параметр dir_qrec(), а не первый
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("Верещагино","Верещагино")
|
| |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 11:04)
| | А здесь что то нужно изменить:
<form name="form1" action="3.php" method="GET">
<select name="menu1" onChange="show_subs();">
<option value="<?php echo @$_GET['menu1'] ?>"><?php echo @$_GET['menu1'] ?></option>
<option value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs();
//->
</script>
</select>
<br>
<input name="search" type="submit" class="knopka" title="Найти объявления" value="Найти">
</form>
|
При использовании этого кода, города по прежнему остаются пустыми, причем вообще списки городов остаются пустыми (сохраняются только регионы)!
<!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">
<select name="menu1" onChange="show_subs();">
<option value="<?php echo @$_GET['menu1'] ?>"><?php echo @$_GET['menu1'] ?></option>
<option value="Московская область">Московская область</option>
<option value="Свердловская область">Свердловская область</option>
<option value="Пермский край">Пермский край</option>
</select>
<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>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 11:04)
| | Куда все подевались??? | |
|
|
|
|
|
|
|
для: sega_z
(10.05.2011 в 16:41)
| | Так а что у вас в $_GET['menu1'] (в момент когда список городов остается пустым)? | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 17:19)
| | Это я пытаюсь отобразить последний выбранный <option> региона после перезагрузки страницы. И тоже самое нужно сделать с последним выбранным <option> города - но как???
Может это не удачный и глупый вариант, но я больше не знаю как сохранить последние выбранные <option> в обоих списках после перезагрузки страницы. И хочу, чтобы вы мне помогли в этом разобраться. Пожалуйста!!!
Сначала два месяца я искал нормальный скрипт динамических списков select - вот он выше.
Теперь хотелось бы в нем добавить сохранение, после перезагрузки страницы, последних выбранных <option> обоих списков. | |
|
|
|
|
|
|
|
для: sega_z
(10.05.2011 в 18:54)
| | Так а что у нас в $_GET['menu1'] (или она пустая)? Это нужно, чтобы воспроизвести ситуацию. | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 19:05)
| | Нет она не пустая. Когда я нажимаю на кнопку формы в $_GET['menu1'] заносится значение поля "регион" и после перезагрузки страницы отображается вместо первого пустого поля списка "регион".
Но с городом так не получится! Нужно это сделать, как то с помощью JS, чтобы выбранные значения списков после перезагрузки отображались вместо первых пустых строк обоих списков.
Я хочу сделать форму расширенного поиска с несколькими полями - выбрал регион и город > нажал поиск > если нет нужной информации добавил еще значение другого поля (например марка авто) > нажал поиск (регион и город уже выбирать снова не нужно) > нет нужной информации > добавил модель авто > нажал поиск (город и регион остаются прежними) > и т.д. Захотел поискать в другом регионе > выбрал другой регион > сохраненный город удалился > выбрал новый город и т.д. | |
|
|
|
|
|
|
|
для: sega_z
(10.05.2011 в 19:12)
| | Одним словом, алгоритм таков - после нажатия кнопки "Найти" в форме и перезагрузки страницы (обработчиком является эта же страница) последние выбранные значения обоих списков сохранились вместо первых пустых строк списков до выбора новых значений. | |
|
|
|
|
|
|
|
для: sega_z
(10.05.2011 в 19:12)
| | ??? | |
|
|
|
|
|
|
|
для: sega_z
(10.05.2011 в 19:12)
| | Жду ответа! | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 19:05)
| | Что никто не поможет??? | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 19:05)
| | С горем пополам удалось составить сохранение последнего значения регионов вместо пустой строки:
<!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>
|
А как сохранить города, не могу понять.
Помогите, пожалуйста, если можете. | |
|
|
|
|