Работа с выпадающим списком (SELECT)
Доброго времени суток всем. Мой вопрос может показатся кому то и ламерским но все же.
для начала кусок кода
<form method="get" action="./dir.php">
<script language=javascript>var fil = ''</script>
<div align="left">Новая характеристика 1</div>
<SELECT name="filter1" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="1">1!</option>
<option value="2">2!</option>
<option value="3">3!</option>
</SELECT>
<script language=javascript>
if (this.filter1!=0) var fil=1
document.write('<input type=hidden value='+fil+' name=filter>')
</script>
<br>
<input type="submit" value="Искать">
</form>
тоесть по логике выходит так, если значение filter1 равно 0 - то не происходит никаких действий, а если не равно то переменная fil равна 1 токо заморочка в том что по факту this.filter1 возвращает (как мне сказали) не значение а реплику undefined. От сюда вопрос - как вытащить id активного пунтка из этого списка? (на всякий случай, списков в форме может быть несколько) |
Попробуйте
this.options[this.selectedIndex].value; Только у Вас скрипт не связан с Selectom!!! Я так думаю :yes: |
Цитата:
если говорить о всей заморочке то мне на форме селектов надо сделать следующее на основет тех пунтков каторый юзер выбирает в селектах нада сформировать еще один параметр формы (ясное дело он в хайдене), после чего все параметры выкинуть GET'ом. Но вот проблемка =) Логику вроде понимаю а по факту - руки матом. папробывал как Вы показали, чето не выходит, простая хтмл в ИЕ ругается на то что объект НУЛЛ или не в ОБЪЕКТЕ. ниже ложу сгенереный код всей Формы. Может я дето по ходу еще нафтыкал :(
<form method="get" action="./dir.php">
<script language=javascript>var fil = ''</script>
<div align="left"><span class="productSpecialPrice"><strong>характеристика 1</strong></span></div>
<SELECT name="filter1" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="1">1!</option>
<option value="2">2!</option>
<option value="3">3!</option>
</SELECT>
<script language=javascript>
if (this.options[this.selectedIndex].value!=0)
var fil=fil+'and1'
</script>
<div align="left"><span class="productSpecialPrice"><strong>характеристика 2</strong></span></div>
<SELECT name="filter2" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="5">весна</option>
<option value="6">лето</option>
<option value="7">осень</option>
</SELECT>
<script language=javascript>
if (this.options[this.selectedIndex].value!=0)
var fil=fil+'and2'
</script>
<div align="left"><span class="productSpecialPrice"><strong>характеристика 3</strong></span></div>
<SELECT name="filter3" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="8">упячга</option>
<option value="11">ебрило</option>
</SELECT>
<script language=javascript>
if (this.options[this.selectedIndex].value!=0)
var fil=fil+'and3'
</script>
<script language=javascript>
document.write('<input type="text" value="'+fil+'" name="filter">')
</script>
<input type=hidden value="" name="search_words">
<br>
<input type="submit" value="Искать">
</form>
|
Bogus,
Скажите, что вы хотите сделать? Просто есть подозрение, что вы все делаете неправильно. |
Цитата:
Постараюсь изложить свое хотенее :p мой движок магазина может создавать фильтры по характеристикам в виде выпадающего списка. Но - стандартная форма скрипта неустраивает тем что по дефолу пашит так - открыл список, кликнул на пунктик и тебя тутже редиректит на результат, хочешь еще фильтр - будь любезен, щелкай дальше. теперь что я сделал: убрал этот редирект, согнал разные фильтры (списки) в одну форму, добавил пару полей hidden с доп параметрами каторые должны уходить вкуче со всем в GET запрос. что не получается: один из параметров должен просто перечислять фильтры каторые были выбраны юзером (к примеру: filter=and1and2and3 каждый andN это отдельный параметр). и вот как я подумал это провернуть, решил обьявить в начале формы переменную fil, а патом после каждого селекта проверяю чтобы id выбраного пункта небыл равен 0 (нулю), так как 0 это единственное значение каторое я могу указать сам и оно 100% не совпадет не с одним ID из движка. Если id пункта не равен нулю, значит юзер сделал выбор и значит параметр этого фильтра нужно добавить, соответсвенно обновляю переменную fil (var fil=fil+'andN'). После чего в конце формы скриптом вписываю нужное хайден поле и вставляю туда в value свою готовую переменную за счет чего и получаю полностью собраных GET запрос. ток вот не пашит. сори за много букв. старался как мог. |
Bogus,
Тогда вы делаете неправильно. Дело в том, что JavaScript, в отличии от php, должен работать динамически. Т.е. работать, основываясь на событиях, происходящих в браузере, и изменять состояние уже сформированного документа. Поэтому, вы не должны писать код "последовательно" и использовать конструкцию document.write, вы должны установить обработчик события submit формы, которое будет устанавливать необходимое значение hidden поля. Вот один из примеров такой работы, просто я не смог вашу задачу понять до конца, поэтому не точно её решение:
<script type="text/javascript">
// Описываем функцию, которая будет выполняться
// при отправке формы:
// form - ссылка на форму
// filters - хеш фильтров и параметров
function addFilters(form, filters) {
// Получаем элемент нашего "фильтра"
var filter_query = document.getElementsByName("filter")[0];
// Очищаем:
filter_query.value = "";
// "Аналог" foreach из php:
for (var i in filters) if (filters.hasOwnProperty(i)) {
// Получаем фильтр по имени (первый элемент с таким именем):
var filter = document.getElementsByName(i)[0];
// Лучше делать проверку, что выбран не первый вариант:
if (filter.selectedIndex > 0) {
// Теперь добавляем нужный нам "параметр":
filter_query.value += filters[i];
}
}
}
</script>
<!--
В форме указываем наш обработчик , первый параметр - форма,
второй - хеш, в котором ключи - имена фильтров, а значения -
добавляемый в запрос параметр:
-->
<form method="get" onsubmit="addFilters(this, {'filter1':'and1', 'filter2':'and2'})" action="./dir.php">
<div align="left">Новая характеристика 1</div>
<SELECT name="filter1" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="1">1!</option>
<option value="2">2!</option>
<option value="3">3!</option>
</SELECT>
<SELECT name="filter2" style="margin-top: 5px;">
<option style="color: #AAAAAA" value="0">Выбрать »</option>
<option value="1">1!</option>
<option value="2">2!</option>
<option value="3">3!</option>
</SELECT>
<br>
<input type="hidden" name="filter" value="" />
<input type="submit" value="Искать">
</form>
|
ну впринципе да, написать ф-ю это действительно выход. только вот поскольку содержимое формы может менятся в зависимости от кол-ва select'a то я не понимаю как мне передать все данные в форму
addFilters(this, {'filter1':'and1', 'filter2':'and2'}
я не смогу перечислить все фильтры в ф-и подобным образом если контент изменится (к примеру добавится еще один фильтр). так получается что я должен при каждом изменении формы редактировать вызов ф-и. можно как то одним махом заслать абсолютно все переменные формы в ф-ю и там уже их перебирать и строить свой GET запрос? |
думал если отправить в ф-ю всю форму то она уйдет туда массивом выбраных значений :( уже понял что уходит вся форма цеиком =)
скажите могу ли я как то определить кол-во елементов select в форме, ну и их имена заодно или чтонибуть чтобы нормально получать доступ к ним и их значениям? или может можно как то отправить в форму масив данных? |
Цитата:
var sel = document.body.getElementsByTagName('select');
sel.length;
Цитата:
// имя первого select'а sel[0].name; // sel[1] - второго, sel[2] - третьего и т.д. Цитата:
sel[0].value;// значение первого select'а и т.д. по аналогии с name В общем в переменной sel будет храниться масив select'ов всей страницы, к свойствам, атрибутам и значениям которых вы имеете доступ. |
Bogus,
А имена параметров и фильтров как-то связанны? |
| Часовой пояс GMT +3, время: 09:39. |