Javascript-форум (https://javascript.ru/forum/)
-   Я не знаю javascript (https://javascript.ru/forum/ya-ne-znayu-javascript/)
-   -   Обработка значений select multiple (https://javascript.ru/forum/ya-ne-znayu-javascript/3930-obrabotka-znachenijj-select-multiple.html)

разум 07.06.2009 07:58

Обработка значений select multiple
 
Господа, нужна помощь.
Есть форма, в ней <select name="f[]" multiple>
и большой список options.
Нужно сделать, чтобы при клике на любой вариант, в поле <input type="text"> вставлялось "http://mysite.com/sctipt.php?f[]=1&f[]=2&f[]=3"
где "f[]=" подставляется автоматически для каждого значения.
Как я понимаю, при каждом клике нужно вызывать цикл, который к переменной добавляет "f[]=" и значение того варианта, на который нажали.
Соответственно нужен так же обработчик и снятия выделения с варианта.
Заранее большое спасибо.

egg 07.06.2009 11:51

<input id='tfld' type="text" value=''> 
<select name='slct' onchange='tfld.value="http://mysite.com/sctipt.php?"+slct.value+"=1&"+slct.value+"=2&"+slct.value+"=3"'
>
  <option value=..>
  ...
</select>

Riim 07.06.2009 11:58

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

Riim 07.06.2009 12:00

egg, slct.value возвращает значение первого выделенного option-а, даже если их выделено несколько.

разум 07.06.2009 12:20

Да я понимаю, что писать не будут. Просто как реализовать подобное на пхп я знаю, а вот с синтаксисом javascript пока не знаком.
Прошлый предложенный скрипт не подходит тем, что он работает при простом нажатии мышкой, а нужно чтобы работало при Ctrl+click
Если немного доделать скрипт, который предоставили выше, то получается почти то что надо:
<input id='tfld' type="text" value='http://mysite.com/sctipt.php?'> 
<select name="slct" multiple onchange='tfld.value=tfld.value+"&f[]="+slct.value'>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
</select>

После щелчков мыши получается http://mysite.com/script.php?&f[]=1&f[]=2&f[]=3
Т.е. нужно как-то сделать, чтобы работало при щелчке с зажатым Ctrl и проверку, если выделение с option снимается. Тут видимо надо делать циклом, проверять, если значение выделено, то добавлять его к tfld.value
Вот с этим немного непонятно, как именно делать проверку на "чекнутость"?

Riim 07.06.2009 16:20

Покопайся в этом коде:

var Option = {
	getValue: function(self) {
		if (self) return (self.attributes.value || {}).specified ? self.value : self.text;
	}
};

var Select = {
	getValue: function(self) {
		if (self) {
			if (self.type == 'select-one')
				return self.selectedIndex > -1 ? Option.getValue(self.options[self.selectedIndex]) : '';
			for (var result = [], getValue = Option.getValue, options = self.options, i = 0, j = 0, length = options.length; i < length; i++)
				if (options[i].selected) result[j++] = getValue(options[i]);
			return result;
		}
	}
};

egg 07.06.2009 21:45

извините, неправильно понял задачу; Riim почти все расписал, осталось только выбрать событие, на который можно повесить обработчик собирающий результирующую строку из значений массива Select.getValue(slct)

x-yuri 08.06.2009 14:09

а что, без javascript уже не модно? http://www.php.net/manual/en/languag...s.external.php


Часовой пояс GMT +3, время: 04:35.