Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как передать значение из select, в котором нет опции value
 
 автор: Владимир22   (13.09.2008 в 16:07)   письмо автору
 
 

Как передать значение из select, в котором нет опции value?
Вот код:
<SCRIPT language=JavaScript>
function sender(){
Indx=document.sh.city_.selectedIndex; 
top.document.list.city.value = Indx;} 
</SCRIPT>
</head><body>
<form name="sh"><select size=1 name='city_'  onchange="sender()";>
<option selected>Москва</option>
<option>Санкт-Петербург</option>
<option>Екатеринбург</option>
<option>Нижний Новгород</option>
<option>Самара</option>
<option>Волгоград</option></select>

Но в итоге передаётся цифра(номер строки option), а надо, чтобы передавало само название города. Можно ли как-то обойтись без value???

  Ответить  
 
 автор: sim5   (13.09.2008 в 16:50)   письмо автору
 
   для: Владимир22   (13.09.2008 в 16:07)
 

А как вы без value что-то отправите на сервер? Не хотите индексов, пишите так:
<option value="Москва" selected>Москва</option>
<option value="Санкт-Петербург">Санкт-Петербург</option>

  Ответить  
 
 автор: Владимир22   (13.09.2008 в 18:14)   письмо автору
 
   для: sim5   (13.09.2008 в 16:50)
 

Неужели без value никак нельзя?

  Ответить  
 
 автор: sim5   (13.09.2008 в 18:32)   письмо автору
 
   для: Владимир22   (13.09.2008 в 18:14)
 

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

  Ответить  
 
 автор: koshka   (13.09.2008 в 23:16)   письмо автору
 
   для: sim5   (13.09.2008 в 18:32)
 

Ничего там городить и не нужно.
Атрибут value - не обязательный. Если его нет - передается текст из выбранного элемента option. А для Javascript он хранится в свойстве text.

То есть

<script language="javascript"> 
function sender(){ 
    var obj  = document.sh.city_;
     var Indx = obj.options[obj.selectedIndex].text;
    top.document.list.city.value = Indx;
}  
</script> 
</head><body> 
<form name="sh">
    <select size=1 name='city_'  onchange="sender()";> 
        <option selected>Москва</option> 
        <option>Санкт-Петербург</option> 
        <option>Екатеринбург</option> 
        <option>Нижний Новгород</option> 
        <option>Самара</option> 
        <option>Волгоград</option>
    </select> 

  Ответить  
 
 автор: PAT   (13.09.2008 в 19:15)   письмо автору
 
   для: Владимир22   (13.09.2008 в 16:07)
 

Форма ВСЕГДА передаёт пару значений NAME=VALUE всех элементов формы.

Если у элемента формы нет значения у атрибута NAME, то вообще пара значений для этого элемента не передаётся.

Если у элемента нет значения у VALUE, то передаётся "пустая" пара: VALUE=''

Как я понял, вы хотите, чтобы форма передала значение текста выбранного опшена.
Больших проблем при этом нет.
Надо просто:
а) иметь ещё один инпут типа HIDDEN
б) селекту вообще НЕ НАЗНАЧАТЬ атрибут NAME
в) иметь функцию, коя по выбору опшена - по событию ONGANGE - инпуту типа HIDDEN передаст значение текста выбранного опшена.

Пример:
<form name="myFRM">
...
<select onchange="document.forms.myFRM.vmesto_selecta.value = this.options [this.selectedIndex].text">
<option>Москва
<option>...
...
</select><!-- ОБРАТИТЕ ВНИМАНИЕ! У <select> вовсе нет атрибута NAME -->

<input name="vmesto_selecta" value="Москва" type="hidden">
<!-- ОБРАТИТЕ ВНИМАНИЕ! Значение VALUE этого инпута изначально содержит текст первого опшена -->

...
</form>

Разумеется - это всего лишь ОДИН из возможных вариантов решения вашей задачи.


*Внимательно прочтите

  Ответить  
 
 автор: koshka   (13.09.2008 в 23:23)   письмо автору
 
   для: PAT   (13.09.2008 в 19:15)
 

>Форма ВСЕГДА передаёт пару значений NAME=VALUE всех элементов формы.

не всегда

>Если у элемента нет значения у VALUE, то передаётся "пустая" пара: VALUE=''

Это не так. Исключения:
1.select
2.input type="file"
3.input type="checkbox"
4.input type="radio"

  Ответить  
 
 автор: PAT   (14.09.2008 в 04:40)   письмо автору
 
   для: koshka   (13.09.2008 в 23:23)
 

[поправлено модератором]

  Ответить  
 
 автор: Drago   (14.09.2008 в 04:56)   письмо автору
 
   для: PAT   (14.09.2008 в 04:40)
 

Я надеюсь, вы не это

>Если у элемента нет значения у VALUE, то передаётся "пустая" пара: VALUE=''

Это не так. Исключения:
1.select
2.input type="file"
3.input type="checkbox"
4.input type="radio"

подразумеваете под глупостью?

  Ответить  
 
 автор: PAT   (14.09.2008 в 05:30)   письмо автору
 
   для: Drago   (14.09.2008 в 04:56)
 

В том числе и это.

Мною написано чётко: если НЕТ ЗНАЧЕНИЯ, то оно и не передаётся.

Вы хотите сказать, что существуют какие-то "исключения"?
Из кошелька, в котором НЕТ ДЕНЕГ, при каких-то "исключительных" обстоятельствах можно всё-таки вытащить червонец? :-)

  Ответить  
 
 автор: Drago   (14.09.2008 в 05:51)   письмо автору
 
   для: PAT   (14.09.2008 в 05:30)
 

>Мною написано чётко: если НЕТ ЗНАЧЕНИЯ, то оно и не передаётся.

Вами написано по-другому:

Форма ВСЕГДА передаёт пару значений NAME=VALUE всех элементов формы.
Если у элемента нет значения у VALUE, то передаётся "пустая" пара: VALUE=''

это немного разные вещи.

>Вы хотите сказать, что существуют какие-то "исключения"?

Да. Если у элементов radio или checkbox не определен атрибут value, либо он является пустой строкой, то пара значений NAME=VALUE для них не передается, в принципе.
Для элемента select, если атрибут value не определен, то в паре значений NAME=VALUE, вместо VALUE передается текст, указанный в option.

  Ответить  
 
 автор: sim5   (14.09.2008 в 05:56)   письмо автору
 
   для: Drago   (14.09.2008 в 05:51)
 

>Для элемента select, если атрибут value не определен, то в паре значений NAME=VALUE, вместо VALUE передается текст, указанный в option.

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

[поправлено модератором]

  Ответить  
 
 автор: Drago   (14.09.2008 в 06:20)   письмо автору
 
   для: sim5   (14.09.2008 в 05:56)
 

Можете сами убедиться.

<form method=post>
  <select name="select">
    <option>Item1</option>
    <option>Item2</option>
    <option>Item3</option>
    <option>Item4</option>
    <option>Item5</option>
  </select>
  <input type="submit" value="Send">
</form>

<?
if ($_POST){
    
var_dump($_POST);
}
?>


>А чекбоксы и радиокнопки могут не иметь значение, так они и служат для выбора, и выбранный всегда передаст свое состояние.
Разумеется. Если value у них не определен, то у выбранного checkbox или radio передастся текстовое значение "on". А у не выбранного, не передастся ничего. В том числе и NAME.

  Ответить  
 
 автор: sim5   (14.09.2008 в 06:30)   письмо автору
 
   для: Drago   (14.09.2008 в 06:20)
 

Вот именно, занчение "on", на то они и служат эти элементы. А получать указатель в массиве на строку, это есть маразм, что прикажете - по указателю string с индексом, находить значение. Есть пара имя=значение, и не надо усложнять самому себе жизнь.

[поправлено модератором]

  Ответить  
 
 автор: Drago   (14.09.2008 в 07:03)   письмо автору
 
   для: sim5   (14.09.2008 в 06:30)
 

sim5, вы наверное плохо выспались. Лично я, не имею привычки усложнять себе жизнь.

Да и речь была не о том. Я, лишь, чуть более, развернуто указал ислючения для этих выражений, которые утверждал PAT.

Форма ВСЕГДА передаёт пару значений NAME=VALUE всех элементов формы. 
Если у элемента нет значения у VALUE, то передаётся "пустая" пара: VALUE=''


С чем, конкретно, вы не согласны, не прибегая к отговоркам с маразмом?

  Ответить  
 
 автор: sim5   (14.09.2008 в 07:24)   письмо автору
 
   для: Drago   (14.09.2008 в 07:03)
 

Да нет, нормально поспал :) Все правильно, элементы типа чекбокс сулужат для выбора, и совсем не обязательно им указывать значения, если нам важно знать только их состояния. Этим я пользуюсь когда выгодно именно такое представление. Что касается списка, в основных браузерах да, будет передан текст опшена, но это верно для всех без исключения браузеров или нет? Я потому и за традиционную "пару".
Ну и хотелось бы узнать главное - зачем автору нужно именно так, текстовое значение. Ведь, если это для последующей обработки на сервере, то уж вы должны знать, что лучше, чем представление уникальным индексом, ничего нет (а особенно для связанных списков).

PS. Кстати о input type="file". Тут вообще надо быть осторожным. Можно передать файл нулевой длины, а часто на форуме встречаются примеры, когда закачку файла делают с использованием copy(), получая баги в конце концов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования