Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.02.2009, 20:35
Интересующийся
Отправить личное сообщение для Bogus Посмотреть профиль Найти все сообщения от Bogus
 
Регистрация: 20.02.2009
Сообщений: 10

Работа с выпадающим списком (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 активного пунтка из этого списка? (на всякий случай, списков в форме может быть несколько)
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2009, 23:04
Интересующийся
Отправить личное сообщение для gcolor Посмотреть профиль Найти все сообщения от gcolor
 
Регистрация: 19.11.2008
Сообщений: 17

Попробуйте
this.options[this.selectedIndex].value;
Только у Вас скрипт не связан с Selectom!!!
Я так думаю
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2009, 00:41
Интересующийся
Отправить личное сообщение для Bogus Посмотреть профиль Найти все сообщения от Bogus
 
Регистрация: 20.02.2009
Сообщений: 10

Сообщение от gcolor Посмотреть сообщение
Попробуйте
this.options[this.selectedIndex].value;
Только у Вас скрипт не связан с Selectom!!!
Я так думаю
ну от части Вы правы. смысл не в Select'e

если говорить о всей заморочке то мне на форме селектов надо сделать следующее

на основет тех пунтков каторый юзер выбирает в селектах нада сформировать еще один параметр формы (ясное дело он в хайдене), после чего все параметры выкинуть 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, 21.02.2009 в 00:44. Причина: очепятки
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2009, 00:51
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Bogus,
Скажите, что вы хотите сделать? Просто есть подозрение, что вы все делаете неправильно.
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2009, 01:04
Интересующийся
Отправить личное сообщение для Bogus Посмотреть профиль Найти все сообщения от Bogus
 
Регистрация: 20.02.2009
Сообщений: 10

Сообщение от Андрей Параничев Посмотреть сообщение
Bogus,
Скажите, что вы хотите сделать? Просто есть подозрение, что вы все делаете неправильно.
если честно то я не удивлюсь если будет именно так.
Постараюсь изложить свое хотенее

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

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

что не получается: один из параметров должен просто перечислять фильтры каторые были выбраны юзером (к примеру: filter=and1and2and3 каждый andN это отдельный параметр).

и вот как я подумал это провернуть, решил обьявить в начале формы переменную fil, а патом после каждого селекта проверяю чтобы id выбраного пункта небыл равен 0 (нулю), так как 0 это единственное значение каторое я могу указать сам и оно 100% не совпадет не с одним ID из движка. Если id пункта не равен нулю, значит юзер сделал выбор и значит параметр этого фильтра нужно добавить, соответсвенно обновляю переменную fil (var fil=fil+'andN').
После чего в конце формы скриптом вписываю нужное хайден поле и вставляю туда в value свою готовую переменную за счет чего и получаю полностью собраных GET запрос.

ток вот не пашит.


сори за много букв. старался как мог.
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2009, 02:00
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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>
Ответить с цитированием
  #7 (permalink)  
Старый 21.02.2009, 15:00
Интересующийся
Отправить личное сообщение для Bogus Посмотреть профиль Найти все сообщения от Bogus
 
Регистрация: 20.02.2009
Сообщений: 10

ну впринципе да, написать ф-ю это действительно выход. только вот поскольку содержимое формы может менятся в зависимости от кол-ва select'a то я не понимаю как мне передать все данные в форму

addFilters(this, {'filter1':'and1', 'filter2':'and2'}


я не смогу перечислить все фильтры в ф-и подобным образом если контент изменится (к примеру добавится еще один фильтр). так получается что я должен при каждом изменении формы редактировать вызов ф-и.


можно как то одним махом заслать абсолютно все переменные формы в ф-ю и там уже их перебирать и строить свой GET запрос?
Ответить с цитированием
  #8 (permalink)  
Старый 21.02.2009, 15:33
Интересующийся
Отправить личное сообщение для Bogus Посмотреть профиль Найти все сообщения от Bogus
 
Регистрация: 20.02.2009
Сообщений: 10

думал если отправить в ф-ю всю форму то она уйдет туда массивом выбраных значений уже понял что уходит вся форма цеиком =)

скажите могу ли я как то определить кол-во елементов select в форме, ну и их имена заодно или чтонибуть чтобы нормально получать доступ к ним и их значениям?

или может можно как то отправить в форму масив данных?

Последний раз редактировалось Bogus, 21.02.2009 в 15:34. Причина: дополнение
Ответить с цитированием
  #9 (permalink)  
Старый 21.02.2009, 16:34
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Сообщение от Bogus
могу ли я как то определить кол-во елементов select в форме
var sel = document.body.getElementsByTagName('select');
sel.length;


Сообщение от Bogus
ну и их имена заодно
// имя первого select'а
sel[0].name;
// sel[1] - второго, sel[2] - третьего и т.д.


Сообщение от Bogus
чтонибуть чтобы нормально получать доступ к ним и их значениям
sel[0].value;// значение первого select'а и т.д. по аналогии с name


В общем в переменной sel будет храниться масив select'ов всей страницы, к свойствам, атрибутам и значениям которых вы имеете доступ.
Ответить с цитированием
  #10 (permalink)  
Старый 21.02.2009, 16:47
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Bogus,
А имена параметров и фильтров как-то связанны?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сброс параметра select petr0007 Общие вопросы Javascript 2 16.02.2009 13:23
Динамическое обновление списка Select Fender Events/DOM/Window 3 12.06.2008 21:30