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

HTML+CSS+JavaScript

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

 

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

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

тема: Помогите доработать JS скрипт списков
 
 автор: sega_z   (08.05.2011 в 21:25)   письмо автору
 
 

Для вывода зависимых списков 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()

  Ответить  
 
 автор: cheops   (08.05.2011 в 21:49)   письмо автору
 
   для: sega_z   (08.05.2011 в 21:25)
 

>Мне кажется, что нужно доработать function show_subs1()
Нет, нужно вместо show_subs1() вызывать show_subs() - она как раз эту задачу решает.

  Ответить  
 
 автор: sega_z   (08.05.2011 в 22:12)   письмо автору
 
   для: cheops   (08.05.2011 в 21:49)
 

Да, действительно! Спасибо!

Т.е. функцию function show_subs1() вообще я вообще удаляю.

  Ответить  
 
 автор: sega_z   (08.05.2011 в 22:43)   письмо автору
 
   для: 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 в 23:24)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: sega_z   (09.05.2011 в 00:25)   письмо автору
 
   для: cheops   (08.05.2011 в 23:24)
 

Хорошо, спасибо!
И еще один нужный момент - как вместо пустых значений массивов dir[1][0]=new dir_qrec("","") и т.д. добавить определенную переменную, которая может быть пустой (например @$gorod или @$_GET [gorod ]).
Это необходимо, чтобы последние выбранные значения "value" полей остались на экране (чтобы не вводить повторно, в случае редактирования формы).

  Ответить  
 
 автор: cheops   (09.05.2011 в 00:39)   письмо автору
 
   для: sega_z   (09.05.2011 в 00:25)
 

Первому параметру функции dir_qrec() передайте какое-нибудь уникальное значение, а второй параметр, который отображается в option оставляйте пустым.

  Ответить  
 
 автор: sega_z   (09.05.2011 в 00:42)   письмо автору
 
   для: cheops   (09.05.2011 в 00:39)
 

Не много не понял, покажите пожалуйста на примере данного кода.

  Ответить  
 
 автор: cheops   (09.05.2011 в 00:44)   письмо автору
 
   для: 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("Верещагино","Верещагино")

  Ответить  
 
 автор: sega_z   (09.05.2011 в 01:10)   письмо автору
 
   для: 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 в 11:04)   письмо автору
 
   для: 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("Верещагино","Верещагино")

  Ответить  
 
 автор: sega_z   (09.05.2011 в 11:40)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: sega_z   (10.05.2011 в 16:41)   письмо автору
 
   для: cheops   (09.05.2011 в 11:04)
 

Куда все подевались???

  Ответить  
 
 автор: cheops   (10.05.2011 в 17:19)   письмо автору
 
   для: sega_z   (10.05.2011 в 16:41)
 

Так а что у вас в $_GET['menu1'] (в момент когда список городов остается пустым)?

  Ответить  
 
 автор: sega_z   (10.05.2011 в 18:54)   письмо автору
 
   для: cheops   (10.05.2011 в 17:19)
 

Это я пытаюсь отобразить последний выбранный <option> региона после перезагрузки страницы. И тоже самое нужно сделать с последним выбранным <option> города - но как???

Может это не удачный и глупый вариант, но я больше не знаю как сохранить последние выбранные <option> в обоих списках после перезагрузки страницы. И хочу, чтобы вы мне помогли в этом разобраться. Пожалуйста!!!

Сначала два месяца я искал нормальный скрипт динамических списков select - вот он выше.
Теперь хотелось бы в нем добавить сохранение, после перезагрузки страницы, последних выбранных <option> обоих списков.

  Ответить  
 
 автор: cheops   (10.05.2011 в 19:05)   письмо автору
 
   для: sega_z   (10.05.2011 в 18:54)
 

Так а что у нас в $_GET['menu1'] (или она пустая)? Это нужно, чтобы воспроизвести ситуацию.

  Ответить  
 
 автор: sega_z   (10.05.2011 в 19:12)   письмо автору
 
   для: cheops   (10.05.2011 в 19:05)
 

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

Но с городом так не получится! Нужно это сделать, как то с помощью JS, чтобы выбранные значения списков после перезагрузки отображались вместо первых пустых строк обоих списков.

Я хочу сделать форму расширенного поиска с несколькими полями - выбрал регион и город > нажал поиск > если нет нужной информации добавил еще значение другого поля (например марка авто) > нажал поиск (регион и город уже выбирать снова не нужно) > нет нужной информации > добавил модель авто > нажал поиск (город и регион остаются прежними) > и т.д. Захотел поискать в другом регионе > выбрал другой регион > сохраненный город удалился > выбрал новый город и т.д.

  Ответить  
 
 автор: sega_z   (10.05.2011 в 22:31)   письмо автору
 
   для: sega_z   (10.05.2011 в 19:12)
 

Одним словом, алгоритм таков - после нажатия кнопки "Найти" в форме и перезагрузки страницы (обработчиком является эта же страница) последние выбранные значения обоих списков сохранились вместо первых пустых строк списков до выбора новых значений.

  Ответить  
 
 автор: sega_z   (10.05.2011 в 22:32)   письмо автору
 
   для: sega_z   (10.05.2011 в 19:12)
 

???

  Ответить  
 
 автор: sega_z   (11.05.2011 в 19:04)   письмо автору
 
   для: sega_z   (10.05.2011 в 19:12)
 

Жду ответа!

  Ответить  
 
 автор: sega_z   (11.05.2011 в 19:05)   письмо автору
 
   для: cheops   (10.05.2011 в 19:05)
 

Что никто не поможет???

  Ответить  
 
 автор: sega_z   (12.05.2011 в 20:30)   письмо автору
 
   для: 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>


А как сохранить города, не могу понять.
Помогите, пожалуйста, если можете.

  Ответить  
Rambler's Top100
вверх

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