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

V7
На сайте с 31.01.2006
Offline
134
880

Есть такая форма:

<SELECT name="name1">

<OPTION value="123" selected>Александр</OPTION>
<OPTION value="543">Алексей</OPTION>
<OPTION value="732">Анатолий</OPTION>
<OPTION value="458">Андрей</OPTION>
</SELECT>

<SELECT name="name2">
<OPTION value="854" selected>Александр</OPTION>
<OPTION value="986">Алексей</OPTION>
<OPTION value="234">Анатолий</OPTION>
<OPTION value="896">Андрей</OPTION>
</SELECT>

<SELECT name="name3">
<OPTION value="412" selected>Александр</OPTION>
<OPTION value="754">Алексей</OPTION>
<OPTION value="899">Анатолий</OPTION>
<OPTION value="654">Андрей</OPTION>
</SELECT>

Соответственно, что бы сейчас отправить например

name1 458

name2 896

name3 654

нужно 3 раза из выпадающего списка выбирать "Андрей".

Можно ли упростить эту процедуру для пользователей, что бы они выбирали 1 раз "Андрей" из выпадающего списка, но name1 - name3 передавались те, которые соответствуют этому выбору?

Спасибо!

mxp100
На сайте с 20.12.2006
Offline
49
#1

JavaScript тебе поможет!

а откуда эти индентификаторы беруться? если из БД, то не проще ли просто находить их, а пользователь просто бы выбирал только один раз.

А если тебе именно так надо было без использования возможностей БД, то вот

<SCRIPT>

function changename(n1){
if (n1 == '458){
form1.name2.value = '896';
form1.name2.value = '654';
}
и т.д....
}
</SCRIPT>
<FORM NAME="form1" ID="form1">
<SELECT name="name1" OnChange="changename(name1.value)">
<OPTION value="123" selected>Александр</OPTION>
<OPTION value="543">Алексей</OPTION>
<OPTION value="732">Анатолий</OPTION>
<OPTION value="458">Андрей</OPTION>
</SELECT>
<HIDDEN NAME="name2" VALUE="854">
<HIDDEN NAME="name3" VALUE="412">
</FORM>
mxp100
На сайте с 20.12.2006
Offline
49
#2

вроде в коде не ошибся, не проверял

но так не совсем рационально ИМХО

Dreammaker
На сайте с 20.04.2006
Offline
569
#3

Как я понял "имена" во всех селектах одинаковы? Если это так и формы формируются динамически на стороне сервера, то сделайте их в таком виде


<SELECT name="name1">
<OPTION value="123_854_412" selected>Александр</OPTION>
<OPTION value="543_986_754">Алексей</OPTION>
<OPTION value="732_234_899">Анатолий</OPTION>
<OPTION value="458_896_654">Андрей</OPTION>
</SELECT>

А полученный name1 распарсивайте на стороне сервера. ИМХО, наиболее удобный для пользователей вариант. Сам нечто подобное в одном проекте делал.

mxp100
На сайте с 20.12.2006
Offline
49
#4

можно и так как написал Dreammaker =)))

только если они генеряться, то и не проще ли передавать только одно значение, чем потом парсить ИМХО

просто если это берется из БД, то проще (правда возможно медленее) сделать запрос к БД

Dreammaker
На сайте с 20.04.2006
Offline
569
#5

В моём случае, форма строилась после запроса по базе в 500К - 1М позиций :) , при том без индекса (пришлось отказаться для ускорения загонки прайсов в базу).

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

Так, что всё зависит от окружающей среды :)

update: уточню задача всё же отличалась от вышепоставленной, но что-то общее найти можно.

V7
На сайте с 31.01.2006
Offline
134
#6

Нет, value тупо все в форме прописаны. БД вообще не используется. Вернее не на этом этапе.

С помощью формы передаются данные в PHP, программа написана, модифицировать ее не хочется, а вот возникла такая задача - упростить пользователю жизнь и не заставлять его 15 раз выбирать одних и тех же "Андреев" во всех списках, а просто выбрав один раз и программе передались бы все "name" с теми "value", которые соответствуют этому "Андрею".

mxp100 - что то не работает. Но может это у меня руки кривые, я во всем этом пока не очень 🙅

Shtogrin
На сайте с 02.11.2006
Offline
95
#7

Обработчик без дополнительного дублирования кодов имен. Синхронизация по имени.

<script>
function setname(elem)
{
var field=new Array('name1','name2','name3');
var str=elem.options[elem.selectedIndex].text;

for(i=0;i<field.length;i++)
{
if(elem.name==field)
continue;
for(j=0;j<elem.form[field].options.length;j++)
if(elem.form[field].options[j].text == str)
{
elem.form[field].selectedIndex=j;
break;
}
}
}
</script>

<FORM NAME="form1" ID="form1">
<SELECT name="name1" onchange="setname(this);">
<OPTION value="123" selected>Александр</OPTION>
<OPTION value="543">Алексей</OPTION>
<OPTION value="732">Анатолий</OPTION>
<OPTION value="458">Андрей</OPTION>
</SELECT>

<SELECT name="name2" onchange="setname(this);">
<OPTION value="854" selected>Александр</OPTION>
<OPTION value="986">Алексей</OPTION>
<OPTION value="234">Анатолий</OPTION>
<OPTION value="896">Андрей</OPTION>
</SELECT>

<SELECT name="name3" onchange="setname(this);">
<OPTION value="412" selected>Александр</OPTION>
<OPTION value="754">Алексей</OPTION>
<OPTION value="899">Анатолий</OPTION>
<OPTION value="654">Андрей</OPTION>
</SELECT>
</form>
www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
V7
На сайте с 31.01.2006
Offline
134
#8

Shtogrin

Благодарствую! То, что надо.

Если еще можно как-то спрятать все выпадающие списки, кроме одного - было бы вообще замечательно.

Shtogrin
На сайте с 02.11.2006
Offline
95
#9

<SELECT name="name3" onchange="setname(this);" style="display:none">

V7
На сайте с 31.01.2006
Offline
134
#10

Shtogrin, еще раз спасибо, вопрос полностью решен.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий