Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > работа с динамическими select


Автор: smoke888 7.6.2008, 14:25
Здравствуйте уважаемые участники форума!

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

сначала несколько слов о задаче:
Работаю я на предприятии, которое имеет несколько подразделений по области. Каждое подразделение отвечает за некоторые объекты в определенных районах этой области. Естественно районы имеют множество населенных пунктов. 

Руководство поставило задачу собрать по локальной сети кое-какие данные с подразделений. Решили использовать для этого web технологии. 
В частности php+mysql+javascript.  

В принципе задача простая и была реализована. Однако имеются шероховатости, причем существенные, которые хотелось бы устранить. 

Для ввода данных подразделениями я сделал, естественно, web форму. 
В нее входят несколько полей, меня интересует сейчас только 3:
Наименование подразделения: --список подразделений--
Район: --список районов--
Населенный пункт: -- список населенных пунктов--

Из справочной таблицы mysql я, при открытии формы, формирую начальные данные этих select'ов. Т.е. в список районов запихиваю все районы, которые существуют в области. В список НП запихиваю все населеные пункты всех районов. 

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

Поэтому я решил попробовать облегчить задачу людям. Из серфа по инету выискал, что есть такая чудесная технология AJAX, которая может мне помочь.

Нашел библиотеку JShttpRequest и с ее помощью сваял кое-чего.  

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

Но что-то я не пойму, почему когда просматриваешь код html страницы содержимое select районов прежнее. Хотя на экране select содержит только нужные мне сведения. 

select я обновляю с помощью выделения его блоками <div id=район></div>.

в JS написал следующее:
<script src="JsHttpRequest.js"></script>
<script type="text/javascript" language="JavaScript">
function autopodbor(name)
{ 
// Create new JsHttpRequest object.
var req = new JsHttpRequest();
// Code automatically called on load finishing.
req.onreadystatechange = function() 
{
if (req.readyState == 4) 
{
// Write result to page element (_RESULT become responseJS). 
document.getElementById('район').innerHTML = req.responseJS.row;
}
}
// Prepare request object (automatically choose GET or POST).
req.open(null, 'auto_select_backend.php', true);
// Send data to backend.
req.send({data: document.getElementById(name).value, element: name});
}
</script>

в команде req.send я отпраляю в 'auto_select_backend.php' данные выборе пользователя, а именно: document.getElementById(name).value - выбранное подразделение, element: name - собственно имя того selecta в котором пользователь и выбрал. 


После того как юзер делает change select'а код срабатывает и на месте поля <div id=район></div> появляется нужный мне select. Кстати из backend'а прилетает строка типа: "<select ....><option>....</option><option>....</option>.............</select>". Эту строку я вставляю в DIV и на экране обновленный select (с новыми данными).

Только вот не пойму одного, как с ним дальше работать?? Мне ведь нужно с него считать value. А Где имя ему давать? 
Фактически в коде html страницы он не показан никак после обновления......

Автор: VSergeyV 7.6.2008, 14:53
а при чем тут формум по Java от Sun Microsystems, Inc. smile 

Автор: smoke888 7.6.2008, 15:21
Цитата(VSergeyV @ 7.6.2008,  14:53)
а при чем тут формум по Java от Sun Microsystems, Inc. smile

Ого.. неожиданный вопрос на вопрос.. smile

Автор: fixxer 7.6.2008, 15:48
Вопрос вполне правомерный Java и JavaScript имеют мало общего.

Автор: Ghirik 7.6.2008, 16:41
Цитата

Эту строку я вставляю в DIV и на экране обновленный select (с новыми данными).


Поставьте на время отладки на страницу кнопочку.

Код

<input type="button" value="Кнопка" onclick="alert(document.getElementById('Ваш Див, в котором селект').innerHTML)">

Автор: smoke888 7.6.2008, 16:56
Цитата(Ghirik @ 7.6.2008,  16:41)
Цитата

Эту строку я вставляю в DIV и на экране обновленный select (с новыми данными).


Поставьте на время отладки на страницу кнопочку.

Код

<input type="button" value="Кнопка" onclick="alert(document.getElementById('Ваш Див, в котором селект').innerHTML)">

Хм.. согласен.. alert выдал именно данные нового селекта с новыми его параметрами типа value и name. 
Т.е. фактически он поменялся. Только почему это никак не отображается в коде html страницы?

Сказывается привычка работать с php.  smile 

Автор: Ghirik 7.6.2008, 17:01
Цитата

Только почему это никак не отображается в коде html страницы?


В Mozilla даже меню называется не "просмотр HTML", а "Исходный код страницы".  smile 

Автор: smoke888 7.6.2008, 17:05
Спасибо за ответы. Пока иду ровно. Если какие вопросы появяться, обращусь к вам за помощью.

Тему пока не закрывайте... smile 

Автор: smoke888 8.6.2008, 12:44
Все задача решена. Тему можно закрывать. 

Ну и конечно памятник разработчикам AJAX!!! Великая штука!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)