Доброго времени суток!
Коллеги, помогите решить следующую проблему:
Исходные даныне: Есть на html странице 8 (число может быть больше или меньше) выпадающих списков <select>, есть БД PostgreSQL и некий Сервер.
Задача: Заходит пользователь на страницу, выбирает из 8 блоков разыне значения, могут быть выбраны как все 8 так и только три, или от 1 до 8. Потом формируются даныне и отправляются к Серверу(
данные не вносятся в БД, даныне уже там есть). затем данные отображаются их на странице. Вопрос, как указать, что именно только выбранные значения посылаются, а остальные нет.
Сейчас вот у меня такой код, мне его посоветовали, но вот не помню чтобы было это описано в Help'е к JavaScript
Код:
|
for val in form.objects {
какие-то операции с val
} |
Общий скрипт выглядит так:
<script language="JavaScript" type="text/javascript">
<!--
function create_query() {
query=""
for val in [...здесь идет перебор всех объектов типа select на форме...] {
zapros='('+name_select+ '=' + val + ')'
if (query ="" )
query=zapros
else {
query=query + 'and (' + zapros +')'
};
}
И еще:
Код:
|
<form name="serv" method="GET" action="/cgi-bin/serv.exe">
<td width="120" height="50">
<text><b>Название животного</b></text><br>
<input type="hidden" name="file" value="[file]">
<select name ="nam" size=1>
<option selected></option>
<option value='Волк'>Волк</option>
<option value='Заяц'>Заяц</option>
<option value='Лиса'>Лиса</option>
</select>
<select name ="sex" size=1>
<option selected></option>
<option value='Муж'>Муж</option>
<option value='Жен'>Жен</option>
</select>
<input type="hidden" name="layer" value="слой">
<input type="hidden" name="layer" value="слой">
<input type="hidden" name="qitem" value="">
<input type="hidden" name="qlayer" value="">
<input type="hidden" name="qstring" value="">
<input type="hidden" name="layer" value="слой">
<input type="hidden" name="mode" value="browse">
<a href="javascript:on_submit_form()">QUERY</a>
</form> |
Конечно, можно создать большое число блоков с if и проверять, выбран соответствующий select или нет, однако, даже для 2 select, различных вариантов будет 4, для 3-х -- уже 8 и так далее. Поэтому такой способ не годится.
Упрощаем идею: будем перебирать все select в цикле. Сначала берем первый из них
и если он не пустой, пишем
Код:
|
query= '(Name_of_Select1 = выбранное_значение)' |
Если пустой, то в query ничего не пишем
Для второго и последующих непустых select'ов будем просто дописывать
Код:
|
query= query + 'and (Name_of_Select2 = выбранное_значение)' |