Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
lrs
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 13
1

Сохранение значения select и работоспособность второго select после отправки формы

02.05.2013, 18:13. Просмотров 1516. Ответов 5
Метки нет (Все метки)

Добрый вечер!Есть проблемка-не могу сохранить значение селекта,сохранив работоспособность др.селектов после отправки формы....страну сохраняет-не могу добиться этого от региона? и при сохраненном первом селекте -второй не работает так как onchange не происходит...как его обойти?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
ind.php
<script type="text/javascript" src="ajax.js"> </script>
<?php
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="GET">'."\n";
 
$query = 'SELECT * FROM country ORDER BY id_country';
$res = mysql_query( $query );
$result =  mysql_query("SELECT * FROM country");
echo 'Страна:
    <select style="width: 200px; height: 30px;" name="country" id="country" class="select" onchange="getList(this.value, \'\');">'."\n";
echo '<option value="0"> Выберите </option>'."\n";
while($ctg = mysql_fetch_array($result))
{
 
   echo "<option value='".$ctg['id_country']."'".((isset($_REQUEST['country'])&&($_REQUEST['country']==$ctg['id_country']))?" selected":"").">".$ctg['name_country']."</option>";
}
echo "</select>";
 
 
?>
 
Регион: <select   style="width: 200px; height: 30px;"   name="region" id="region"  onchange="getList(this.form.elements['country'].value, this.value);">
<option value="0">Выберите</option>
</select><br/>
 
getList.рнр
<?php
if ( !isset($_GET['region']) ) {
     $query = 'SELECT*FROM region WHERE id_country='.$_GET['country'].'';
  $res = mysql_query( $query );
 
  $makerOptions = '<option value="0">Выберите  </option>';
  while ( $mkr = mysql_fetch_array( $res ) ) {
    //$makerOptions = $makerOptions.'<option value="'.$mkr['id_r'].'">'.$mkr['n_region'].'</option>';
  $makerOptions = $makerOptions. "<option value='".$mkr['id_region']."'".((isset($_GET['region'])&&($_GET['region']==$mkr['id_region']))?" selected":"").">".$mkr['name_region']."</option>";
 
  }
  $response = '<?xml version="1.0" encoding="windows-1251" standalone="yes"?>'.
              '<response>'.
                '<action>'.
                'makeMakerList'.
                '</action>'.
                '<options>'.
                $makerOptions.
                '</options>'.
              '</response>';
} 
?>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 var request = null;
function createRequest() {
  try {
    request = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }
  if (request == null) alert("Ошибка при создании объекта XMLHttpRequest!");
}
 
function getList(ctg, mkr) {
  document.getElementById("region").innerHTML = '<option value="0">Выберите</option>';
 if ( mkr == "" )
   url = "getList.php?country=" + ctg  ;
  else
   url = "getList.php?country=" + ctg + "&region=" + mkr;
  createRequest();
  request.open("GET", url, true);
  request.onreadystatechange = makeList;
  request.send(null);
}
 
function makeList() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      // здесь идут построение списков заново
      responseXml = request.responseXML;
      xmlDoc = responseXml.documentElement;
      action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
      options = xmlDoc.getElementsByTagName("options")[0].firstChild.data;
      if ( action == "makeMakerList" )
        document.getElementById("region").innerHTML = options;
      else
        document.getElementById("city").innerHTML = options;
    } else {
      alert("Не удалось получить данные от сервера:\n" + request.statusText);
    }
  }
}
 
var request = null;
function createRequest() {
  try {
    request = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }
  if (request == null) alert("Ошибка при создании объекта XMLHttpRequest!");
}
function getList(ctg, mkr) {
    var _select = document.getElementById("city");
  _select.innerHTML = ""; 
  var option = document.createElement("option");
  var optionText = document.createTextNode("Выберите");
  option.appendChild(optionText);
  option.setAttribute("value", "0");
  _select.appendChild(option);
  if ( mkr == "" )
    url = "getList.php?country=" + ctg;
  else
    url = "getList.php?country=" + ctg + "&region=" + mkr;
  createRequest();
  request.open("GET", url, true);
  request.onreadystatechange = makeList;
  request.send(null);
}
 
 
function makeList() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var responseXml = request.responseXML;
      var xmlDoc = responseXml.documentElement;
      var action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
      if ( action == "makeMakerList" ) {
        _select = document.getElementById("region");
      } else {
       _select = document.getElementById("city");
      }
      _select.innerHTML = ""; 
      options = xmlDoc.getElementsByTagName("option");
      for (var i=0; i<options.length; i++) {
        var value = options[i].getAttribute("value");
        var text = options[i].firstChild.data;
        var option = document.createElement("option");
        var optionText = document.createTextNode(text);
        option.appendChild(optionText);
        option.setAttribute("value", value);
        _select.appendChild(option);
      }
    } else {
      alert("Не удалось получить данные от сервера:\n" + request.statusText);
    }
  }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 18:13
Ответы с готовыми решениями:

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

Как при выборе определённого значения поля select показать новое поле select
Такая задача, у меня есть список значений в поле типа select. Value1 Value2 Value3 Value4 При...

Отключить элементы select на странице, пока страница не загрузится после выбоар элемента в select
Как это можно сделать ?

В зависимости от выбранного значения select отображать input формы
Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы input формы появлялся, только когда в...

Скрывать select если в другом select выбран определенный value
допустим есть форма &lt;form&gt; &lt;select id=&quot;i1&quot; name=&quot;price1&quot;&gt; &lt;option...

5
kalabuni
супермизантроп
Эксперт JS
3402 / 2700 / 646
Регистрация: 18.04.2012
Сообщений: 8,215
02.05.2013, 22:01 2
javascript работает в браузере и работает с HTML-тегами

браузер никакого PHP не знает и не понимает
PHP работает на сервере и формирует HTML-код, который и отдаётся браузеру

да и мы не знаем - чего именно ваши PHP-переменные содержат и чего именно они для браузера сформируют

так что, если хотите, чтобы вам помогли, вызовите ваш файл из своего браузера, затем откройте в браузере "Исходный HTML-код", скопируйте нужное и выложите сюда - без каких-либо PHP-вставок
0
lrs
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 13
02.05.2013, 22:49  [ТС] 3
Скопировал,но здесь тоже,что я уже выложил,только есть переменные стран,выберу страну-будут значения областей...и т.д выложил все что-бы понятней было,все переменные берутся из бд,аякс проверяет наличие и погружает второй селект.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="ajax.js"> </script>
<form action="/catalog4.php" method="GET">
Страна:
    <select style="width: 200px; height: 30px;" name="country" id="country" class="select" onchange="getList(this.value, '');">
<option value="0"> Выберите </option>
<option value='1'>Украина</option><option value='2'>Россия</option><option value='3'>Белорусь</option><option value='4'>Молдова</option></select>
</TD>
<TD colspan="2" align="center" bgcolor="#0099CC">
Регион: <select   style="width: 200px; height: 30px;"   name="region" id="region"  onchange="getList(this.form.elements['country'].value, this.value);">
<option value="0">Выберите</option>
</select><br/>
</TD>
<TD colspan="2" align="center" bgcolor="#0099CC">
Город  : <select  style="width: 200px; height: 30px;" name="city" id="city"><option value="0">Выберите</option></select>
</TD>
0
kalabuni
супермизантроп
Эксперт JS
3402 / 2700 / 646
Регистрация: 18.04.2012
Сообщений: 8,215
02.05.2013, 23:54 4
см. http://codecenter.awardspace.com/selects.html

для передачи странице данных второго селекта нужен отдельный PHP-файл (у меня он под названием reg.php)
0
lrs
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 13
03.05.2013, 00:14  [ТС] 5
У меня getList.php,посмотрел ссылку-тоже самое только у меня значения из бд.У меня все селекты работают четко,только после сабмита обнуляются.....,попробовал сохранить первый селект-так второй стал неактивен....пока по-новой не выберешь значение первого селекта-хотя оно выбрано.....

Добавлено через 4 минуты
Я просто его не выделил -он с 27 пункта...
0
lrs
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 13
05.05.2013, 19:15  [ТС] 6
Тема закрыта.Сделал сам
0
05.05.2013, 19:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 19:15

html select\ multi select option одним кликом
Здравствуйте помогите реализовать такую штуку допустим есть html select список . Нужно сделать так...

При выборе первого select-a на втором select-e должны отображаться те строки которое касается выбранному
У меня есть в таблице три поля(id,parent_id,name_gu),и есть еще два select.Теперь, хотел спросить у...

Перекидывание данных из одного <select>...</select> в другой
Yest dve korobki tipa &lt;select&gt;...&lt;/select&gt;: odna bitkom nabitaya dannimi s bazi dannih, a vtoraya...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru