Получение всех <option> из <select>

Diplom@t

Новичок
Получение всех <option> из <select>

У меня такая задача. Есть два <select>. Один - список доступных категорий (движений и т.д.), второй - используемых. Я средствами JS добавляю во второй селект все необходимые options. После чего мне надо их все передать в php.
Как это сделать?
Я вижу два варианта:
1. Создать <input type=hidden> и средствами JS записывать туда через разделитель все что есть во втором списке.
2. При нажатии submit - при помощи JS выбрать все options.
Но есть некие неудобства:
в первом случае - слишком неудобно и для каждой страницы администрирования надо писать несколько своих JS-функций.
во втором случае выбор всего у меня не везде и не всегда работает, к тому же если сделать список multiple, то пользователь тоже сможет выбирать несколько значений,а мне это не надо.

Помогите. есть ли какой-то более удобный способ?
 

Diplom@t

Новичок
Может я торможу, но причем тут это? мне не из скрипта в хтмл надо список передать, а наоборот!
Если я не понял, прошу объяснить.

P.S. И что значит "В очередной раз"? где этот вопрос уже был?
 

alexhemp

Новичок
Diplom@t

Вопрос не в том тогда форуме задал. Передать при сабмите формы?

Ну тогда обзови селект как массив.
 

Diplom@t

Новичок
Тогда сорри за ошибку форума. Переместите куда надо, обижаться не буду. Хм. и мне казалось я все объяснил :(
Да передать при сабмите формы.
В любом случае суть не меняется.
Как из формы передать в php скрипт все значения в <select> в виде массива (или любом другом)?
 

SelenIT

IT-лунатик :)
Diplom@t
Верно ли я понимаю, что второй select у тебя сейчас используется только для интерактивности/удобстсва, а фактически тебе нужно передать на сервер те значения из первого select-а, которые по одному за клик выбирает пользователь в течение сеанса работы со страницей?

alexhemp
А что не так с форумом?
 

SelenIT

IT-лунатик :)
Тогда, пожалуй, кроме твоих вариантов можно предложить разве что при выборе каждой новой опции отсылать отдельный запрос на сервер (на что, видимо, намекал kost), но ИМХО это здесь излишне. А что и где именно не работает в твоем втором способе?
 

Diplom@t

Новичок
вот код JS:

<input type=submit value='Сохранить партнера' style='width:50%' onmousedown='a_partners_submit();'>

function a_partners_submit() {
dObj = document.getElementById("dlist");
dObj.multiple = true;
for (i = 0; i < dObj.length; i++) {
dObj.selected = true;
}
}

при таком коде и нажатии кнопки выделяется только последний элемент. (причем несколько раз он таки сработал правильно). Если же я добавлю alert():

function a_partners_submit() {
dObj = document.getElementById("dlist");
dObj.multiple = true;
alert("ok");
for (i = 0; i < dObj.length; i++) {
dObj.selected = true;
}
}

то работает правильно, т.е. выделяет все элементы, хотя при этом само событие submit не происходит
 

SelenIT

IT-лунатик :)
Методом научного тыка нашел такой workaround - на место строчки с alert-ом вписать
Код:
self.location = self.location + '#';
P.S. Загадочная все-таки вещь - реализация select-а в IE...
 

SelenIT

IT-лунатик :)
Сорри, забыл предупредить - проверял только в IE 6, более ранних версий под рукой нету. В FF 1.5 тоже работает, но там и без этого все ОК...
 

kost

Новичок
Автор оригинала: Diplom@t
Может я торможу, но причем тут это? мне не из скрипта в хтмл надо список передать, а наоборот!
Если я не понял, прошу объяснить.

P.S. И что значит "В очередной раз"? где этот вопрос уже был?
Отвечаю.

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

Рабочий приер - подгрузка свежих парампамов на http://parampam.rl.kiev.ua

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

Diplom@t

Новичок
Дык. kost, "схожих вопросов было по загрузке содержимого "на лету"". мне не надо загружать на лету! и в этом классе в пхпх передается одно значение - что было выбрано для того чтобы знать что грузить. а мне надо все значения одновременно передать в пхп!

В любом случае спасибо за помощ.
 

kost

Новичок
Честно говоря только сейчас понял суть вопроса до конца. Я думал, что вам надо передавать по одиночке эти элементы списка.

Здесь решение однозначно через DOM чистым JavaScript. Никакого пхп.

Просто перебираются все элементы <select>'а, а потом для каждого создается <input type=hidden name="arr["+i+"]" value=curr>, где в curr хранится значение текущего, а в i счетчик.

Я, впринципе, таким страдал при написании админчасти, где надо было неопределенное количество параметров у элемента сделать.

Оч. понравилась статья http://rtfm.vn.ua/prog/js/domintro/
 

Diplom@t

Новичок
Спасибо. Еще один вариант :) Тоже мудренный правда,но вариант.
И статейка действительно интересная :)
Сенк
 
Сверху