Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработка события SELECT (https://javascript.ru/forum/misc/11442-obrabotka-sobytiya-select.html)

Capricorn 24.08.2010 03:09

Обработка события SELECT
 
Прошу помощи с данным кодом. На форме выбирается тип оплаты, если выбранна безналичка отображается то что в div, во всех остальных случаях скрыта.
<script type="text/javascript">
	function SelectPayType(){
		if (this.options.[this.selectedIndex].value == "3" ){
			document.getElementById('rek').style.display = 'block'}
			else {document.getElementById('rek').style.display = 'none'}
	}
</script>
...
...
...
	<select name="paymenttype" size="1" maxlength="32" style="width:336px;"	onChange="SelectPayType()">
		<option value="1" >наличный расчет</option>
		<option value="2" >кредитная карта</option>
		<option value="3" >безналичный расчет</option>
	</select>
		
	<div id="rek" style="display: none">
		ИНН: <input type="text"><BR>
		КПП: <input type="text"><BR>
		Организация: <input type="text"><BR>
		Юредический адрес: <input type="text"><BR>
		Фактический адрес: <input type="text"><BR>
	</div>

Gvozd 24.08.2010 03:12

Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

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

inGray 24.08.2010 09:17

this.options.[this.selectedIndex].value
- Что-то подозрительное

Capricorn 24.08.2010 09:57

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

inGray 24.08.2010 10:18

this.options - Массив. Зачем Вы точку там ставите?
this.options[this.selectedIndex].value - попробуйте так))

B~Vladi 24.08.2010 10:19

Замени
<select name="paymenttype" size="1" maxlength="32" style="width:336px;"  onChange="SelectPayType()">

на
<select name="paymenttype" size="1" maxlength="32" style="width:336px;"  onChange="SelectPayType.call(this)">

ещё
if (this.options.[this.selectedIndex].value == "3" )

на
if (this.options[this.selectedIndex].value == "3" )


Самый быстрый вариант, а вообще это быдлокод.

Kolyaj 24.08.2010 10:21

Цитата:

Сообщение от inGray
this.options - Массив.

Не массив.

inGray 24.08.2010 10:24

Kolyaj,Простите.. коллекция.
B~Vladi, Код практически полностью тырен с готовых образцов в инете.

B~Vladi 24.08.2010 10:26

Может я затру тогда свой пост?!:-?

Capricorn 24.08.2010 10:31

B~Vladi, а что за вызов функции через call чем отличается при вызове без нее.
<select name="paymenttype" size="1" maxlength="32" style="width:336px;"  onChange="SelectPayType.call(this)">

Как раз после подобной записи код заработал. Огромное человеческое спасибо, а то третий день бился с этой частью кода.

Capricorn 24.08.2010 10:33

Данный код выдернут с CMS'ки

B~Vladi 24.08.2010 10:43

Метод call вызывает функцию в контексте объекта, переданного первым аргументом. Подробнее читай в мануалах.
Раньше у тебя в функции this указывал на window, а теперь на DOM-элемент select.

Capricorn 24.08.2010 10:49

Теперь все ясно стало, ну а маны обязательно по теме прочитаю... еще бы найти толковые :)

По путно созрел вопрос. Как можно подобный код записать что бы в выпадающем списке не было пункта "0"

<select name="paymenttype" size="1" maxlength="32" style="width:336px;"	onChange="SelectChange.call(this)">
			<option value="О" Disabled selected >Выберете вариант</option>
			<option value="1" >наличный расчет</option>
			<option value="2" >кредитная карта</option>
			<option value="3" >безналичный расчет</option>
		</select>

B~Vladi 24.08.2010 10:53

Удалить его не пробовал?

Цитата:

Сообщение от Capricorn
еще бы найти толковые

Ня

Capricorn 24.08.2010 10:56

:) Вариант... а как надпись сохранить "Выберете вариант" в селекте пока ни чего не выбранно в таком случае

B~Vladi 24.08.2010 11:02

Вернуть его назад. Ты определись что тебе надо.

Capricorn 24.08.2010 11:07

Мне нужна надпись с пояснениями в селекте ну что бы самой надписи невыло в вариантах выбора селекта. На подобее
<option value="0" Disabled selected >Выберете вариант</option>
но что бы она в выпадающем списке не отображалась

MikhailGirshberg 24.08.2010 11:09

Цитата:

Сообщение от Capricorn (Сообщение 68403)
if (this.options.[this.selectedIndex].value == "3" )

мне больше нравится так:
if(this.value == "3")


а вот это
Цитата:

Сообщение от Capricorn;
<option value="0" Disabled selected >Выберете вариант</option>

вот так:
<option Disabled selected >Выберете вариант</option>
value option'а при выборе присваивается select'у. Главное - option'ам name не давать.

Capricorn 24.08.2010 11:15

MikhailGirshberg, мне тоже так больше нравится :) минимизация кода это хорошо ...если без ущерба

Цитата:

Сообщение от MikhailGirshberg (Сообщение 68434)
вот так:
<option Disabled selected >Выберете вариант</option>
value option'а при выборе присваивается select'у. Главное - option'ам name не давать.

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

inGray 24.08.2010 11:21

Capricorn,
А что это за цмс-ка?

Capricorn 24.08.2010 11:33

Цитата:

Сообщение от inGray (Сообщение 68437)
Capricorn,
А что это за цмс-ка?

cotonti

Kolyaj 24.08.2010 11:35

Цитата:

Сообщение от Capricorn
Выберете вариант

"выберете" -- это "ну вы уже выберете что-нибудь или как?", а повелительное наклонение будет "выберите".

MikhailGirshberg 24.08.2010 11:51

Цитата:

Сообщение от Capricorn
Суть в том что бы надпись оставить в селекте до перврго выбора, а выпадающем списке ее небыло

тогда в обработчике события onchange придётся дописывать что-то вроде:
var opt_z = this.getElementsByTagName('OPTION')[0]
if(opt_z.disabled) opt_z.parentNode.removeChild(opt_z)

Capricorn 24.08.2010 12:07

MikhailGirshberg, тогда уж на событие onClick если динамически удолять его, если я правильно понял ход мысли... Я думал что то проще есть, типа
<SELECT label="Выберите вариант"... ...>

:)

MikhailGirshberg 24.08.2010 12:18

onClickпроще для понимания. Не помню, почему не понравилось его использовать - кажется, кроссбраузерные грабли были.
label как идея мне тоже когда-то нравился. Почему-то так и не применился нигде. То ли те же грабли, то ли он только в fieldset применяется - не помню.

Capricorn 24.08.2010 12:24

Пока сделаю так
Цитата:

Сообщение от MikhailGirshberg (Сообщение 68444)
тогда в обработчике события onchange придётся дописывать что-то вроде:
var opt_z = this.getElementsByTagName('OPTION')[0]
if(opt_z.disabled) opt_z.parentNode.removeChild(opt_z)

а там может найду альтернативное решение

Sweet 24.08.2010 12:30

Цитата:

Сообщение от Kolyaj
"выберете" -- это "ну вы уже выберете что-нибудь или как?", а повелительное наклонение будет "выберите".

Kolyaj, я вас уважаю, как специалиста, но по-моему слова "выберете" не существует:nono:

Kolyaj 24.08.2010 12:32

Sweet,
да я-то чего, это к Розенталю да к вашим учителям по русскому языку.
Цитата:

Сообщение от Д. Э. Розенталь
Различаются в написании близкие по звучанию безударные окончания будущего времени совершенного вида -ете и повелительного наклонения -ите, например:
выберете — выберите,
выпишете — выпишите,
вытрете — вытрите,
крикнете — крикните,
стукнете — стукните...


Sweet 24.08.2010 12:44

Хмм.. Интересно (гораздо интереснее основной темы:) ). Надо будет повникать.. Спасибо за инфу:thanks:

inGray 24.08.2010 12:54

Раздулся простенький вопрос на три страницы)))

Intuit 12.07.2019 11:32

Это форум или площадка для фрилансеров
 
Цитата:

Сообщение от Gvozd (Сообщение 68404)
Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

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

Если бы человек хотел заплатить за это деньги он бы на сайте фриланс искал услугу а не помощи на данном форуме.
Ваше место не на донном форуме а именно на фрилансе, только лишь занимаете драгоценные байты памяти в базе, давая бессмысленные ответы на вопросы!


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