|
|
|
| Здравствуйте:
есть форма:
<form name="Start_search" action="" method=POST>
Искать по:<br />
<input type=radio name="search_param" value="ник" > нику<br />
<input type=radio name="search_param" value="клан" > клану<br />
<input type=button value='начать поиск' onClick="StartSearch();">
<form>
|
и обработчит этой формы (по нажатию на клавишу который работает:
<script>
function StartSearch()
{
switch (document.all.search_param.value)
{
case 'ник' : действие_1; break;
case 'клан' : действие_2; break;
default : alert('Что-то непонятное произошло... а что вы сделали? =)'); break;
};
};
</script>
|
Я надеялся, что в значении document.all.search_param.value будет то, что выделенно в данный момент. но значение равно undefined
Как узнать, какой пункт выбран? | |
|
|
|
|
|
|
|
для: victoor
(07.03.2007 в 23:35)
| | По идее так и должно быть... | |
|
|
|
|
|
|
|
для: ddhvvn
(08.03.2007 в 10:09)
| | но выводит именно undefined | |
|
|
|
|
|
|
|
для: victoor
(08.03.2007 в 15:29)
| | Всё правильно - до фактического сабмита формы значение value у группы радио-инпутов не определено, т.е. undefined
Надо циклом проверять весь список радио-инпутов на значение атрибута checked - при нахождении радио-инпута с checked==true смотреть его value и выходить из цикла брейком.
Ежели цикл завершается нормальным выходом (т.е. почеканный радио-инпут не найден), то тогда и включать алерт с сообщением "А чего вы сделали..." | |
|
|
|
|
|
|
|
для: CNT
(08.03.2007 в 15:46)
| | спасибо, вроде понял.. | |
|
|
|
|
|
|
|
для: victoor
(08.03.2007 в 15:54)
| | Все решилось намного проще =) :
<form name="Start_search" action="" method=POST>
Искать по:<br />
<input type=radio name="search_param" id="search_param1" value="ник" > нику<br />
<input type=radio name="search_param" id="search_param2" value="клан" > клану<br />
<input type=button value='начать поиск' onClick="StartSearch();">
<form>
|
JavaScript работает по id, а не по name (если есть это самое id). А у передаваемого идет идентификация именно по name.
И можно просто смотреть checked по известным id (что проще, чем делать цикл) =)
Хотя... а не может это породить какие-нибудь проблемы в дальнейшем? | |
|
|
|
|
|
|
|
для: victoor
(09.03.2007 в 01:29)
| | JavaScript работает и по ID и по NAME: смотря какой метод выберете.
Если getElementById - то по ID, а если getElementsByName - то по NAME.
В вашем случае, чтобы не городить каждому элементу ещё и уникальный ID, можно воспользоваться методом getElementsByTagName ('INPUT'), т.е. циклом перебирать все инпуты, проверяя одновременно тип инпута и отметку. Приблизительно так:
for (var obj = document.forms.Start_search.getElementsByTagName ('INPUT'), j = k = 0; j < obj.length; j++)
if (obj [j].type == 'radio' && obj [j].checked) {действие_зависимое_от_obj [j].value; k = 1; break}
if (k) alert ('А чегой-то вы тут наделали?');
|
| |
|
|
|
|
|
|
|
для: CNT
(09.03.2007 в 04:40)
| | Спасибо.
Особенно спасибо за скрипт | |
|
|
|
|
|
|
|
для: victoor
(09.03.2007 в 12:03)
| | Настоятельно не рекомендую использовать GetDocumentByName так как мне кажется что это не сработает в IE... Но я не уверен, возможно это я что-то перепутал. Но по-моему в IE не пашет... | |
|
|
|
|
|
|
|
для: ToNic
(26.07.2007 в 00:29)
| | GetDocumentByName действительно не стоит использовать. Ибо нигде он не работает.
Везде зато пашет getElementsByName, и даже в IE, начиная с версии 5.0
Особенно хорошо он пашет, если помнить, что getElementsByName - это массив и к каждому его элементу нужно обращаться, используя индекс в квадратных скобках.
Если имярек НЕ ИМЕЕТ ПОНЯТИЯ ни о первом (правильном названии метода), ни о втором (метод возвращает массив объектов с одинаковым именем, а не один объект с именем), то, разумеется, такому товарищу настоятельно не рекомендуется использовать этот метод. | |
|
|
|