Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите сделать такой select (https://javascript.ru/forum/misc/37559-pomogite-sdelat-takojj-select.html)

silor 24.04.2013 17:55

Помогите сделать такой select
 
Есть два селекта:

первый:

<select name="dost">
<option value="0">Выберете способ доставки</option>
<option value="1">Почтой России (оплата при получении)</option>
<option value="2">Курьером по России (Оплата по предоплате)</option>
</select>


и второй:

<select name="pay">
<option value="0">Выберете способ оплаты</option>
<option value="1">Наличными при получении</option>
<option value="2">Предоплата на Яндекс деньги</option>
<option value="3">Предоплата на WebMoney</option>
</select>


Как сделать если в первом селекте выбран способ почтой России, то во втором селекте автоматом выбирается оплата при получении, а остальные option становятся не активными к выбору.
Ну и размеется если выбран способ Курьером по России, то во втором селекте становится неактивным наличными при получении.
Надеюсь понятно описал задачу. Заранее спасибо за ответы.

tsigel 25.04.2013 13:23

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<select class="select1" name="dost">
 <option value="0">Выберете способ доставки</option>
 <option value="1">Почтой России (оплата при получении)</option>
 <option value="2">Курьером по России (Оплата по предоплате)</option>
 </select>
<select class="select2" name="pay">
 <option value="0">Выберете способ оплаты</option>
 <option value="1">Наличными при получении</option>
 <option value="2">Предоплата на Яндекс деньги</option>
 <option value="3">Предоплата на WebMoney</option>
</select>
<script>
  $('.select1').change(function() {
    switch($(this).val()) {
      case '0':
         //Действие выполнится при выборе первого option
         break;
      case '1':
         //Действие выполнится при выборе второго option
         break;
      case '2':
         //Действие выполнится при выборе третьего option
         break;
    }
  });
</script>

ksa 25.04.2013 14:39

Цитата:

Сообщение от silor
если в первом селекте выбран способ почтой России, то во втором селекте автоматом выбирается оплата при получении

В этом случае и селекта второго не нужно совсем. Т.к. нет самого выбора...

Цитата:

Сообщение от silor
если выбран способ Курьером по России

Таки показать второй селект с двумя альтернативами...

ksa 25.04.2013 14:56

Нечто вроде такого...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
#case1,
#case2 {
	display: none;
}
</style>
<script type="text/javascript">
function test(Case) {
    switch(Case) {
		case '1':
			document.getElementById('case1').style.display='inline';
			document.getElementById('case2').style.display='';
			break;
		case '2':
			document.getElementById('case1').style.display='';
			document.getElementById('case2').style.display='inline';
			break;
		default:
			document.getElementById('case1').style.display='';
			document.getElementById('case2').style.display='';
    };
};
</script>
</head>
<body>
<label>Выберете способ доставки
	<select name="dost" onchange='test(this.value);'>
		<option value="0"></option>
		<option value="1">Почтой России (оплата при получении)</option>
		<option value="2">Курьером по России (Оплата по предоплате)</option>
	</select>
</label>
<div>
	<p id='case1'>Оплата наличными при получении</p>
	<label id='case2'>Выберете способ оплаты:
		<select name="pay">
			<option value="0"></option>
			<option value="2">Предоплата на Яндекс деньги</option>
			<option value="3">Предоплата на WebMoney</option>
		</select>
	</label>
</div>
</body>
</html>

tsigel 25.04.2013 14:58

Цитата:

Сообщение от ksa

Опечаточка.

ksa 25.04.2013 15:04

tsigel - Зоркий сокол! :D

silor 25.04.2013 15:21

Всем спасибо за ответы) воспользовался способом ksa, работает)

silor 26.04.2013 16:01

Возникла такая проблема, у меня идет проверка через js правильность заполнения полей..

function send(){
	var f=document.forms['checkout'];
	if(!f.name.value || f.name.value=='') alert('Введите Ваше ФИО!');
	else if(!f.address.value || f.address.value=='') alert('Введите Ваш адрес!');
	else if (f.dost.selectedIndex == 0) alert('Выберите способ доставки!');
	else if (f.pay.selectedIndex == 0) alert('Выберите способ оплаты!');
	else f.submit();
}



Как сделать чтобы не вылазила ошибка вы не выбрали способ оплаты?)

ksa 26.04.2013 16:17

Цитата:

Сообщение от silor
Как сделать чтобы не вылазила ошибка вы не выбрали способ оплаты?

Проверить надо ли это вообще проверять...

silor 26.04.2013 16:33

а как эт изменить нужно? Сори, но js вообще не курю((

ksa 26.04.2013 20:39

Цитата:

Сообщение от silor
js вообще не курю

А что куришь? :D
Здается мне ты от программинга вообще далеко... Поскольку в том куске есть все для проведения аналогии. Достаточно хоть что-то понимать в программировании.

silor 26.04.2013 20:41

я на php пишу) до js еще руки не добрались..

ksa 26.04.2013 20:47

Цитата:

Сообщение от silor
я на php пишу

Значит с IF ... THEN ... ELSE должен быть знаком. :D
Все, что тебе нужно - так это просто чуть усложнить условие
Цитата:

Сообщение от silor
if (f.pay.selectedIndex == 0) alert('Выберите способ оплаты!');

Как взять нужное значение для усложнения - есть выше
Цитата:

Сообщение от silor
f.dost.selectedIndex

И вуаля!

silor 26.04.2013 21:00

если чесно нифига не понял)) что именно нужно изменить?
//написал хренотень

так тип?

ksa 26.04.2013 21:02

Ёпт

if ((f.dost.selectedIndex > 1) && (f.pay.selectedIndex == 0)) alert('Выберите способ оплаты!');

silor 26.04.2013 21:06

аа, теперь норм) спс за помощь.. У меня еще проверка идет не только при помощи js, а еще и со стороны php, которую думаю убрать для оплаты..

silor 26.04.2013 21:34

silor, Возникла такая проблема, я 41 строку твоего кода помещаю в селект <select name="pay"><option value="1">Оплата наличными при получении</option></select> (Для дальнейшего занесения в базу значения value), из-за чего не срабатывает проверка на js.. Как можно это исправить?

ksa 29.04.2013 23:15

silor, ты научишся делать нормальные примеры?

Цитата:

Сообщение от silor
из-за чего не срабатывает проверка на js.. Как можно это исправить?

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

silor 30.04.2013 00:25

Так тут и так понятно что проверка на js не срабатывает из-за <select name="pay"><option value="1">, вопрос в том, как можно по другому это сделать? Ведь в базу вносится значение value..

ksa 30.04.2013 08:34

Цитата:

Сообщение от silor
Так тут и так понятно

Тогда тебе и карты в руки... :D

silor 30.04.2013 12:48

а как можно подругому сделать чтобы работало?))

ksa 30.04.2013 13:44

Цитата:

Сообщение от silor
а как можно подругому сделать чтобы работало?

Повторюсь...
Цитата:

Сообщение от ksa
Как тебе что-то можно сказать, если нет действующего примера...


silor 02.05.2013 20:20

Я пишу код так:

<label>Выберете способ доставки
<select name="dost" onchange='test(this.value);'>
<option value="0"></option>
<option value="1">Почтой России (оплата при получении)</option>
<option value="2">Курьером по России (Оплата по предоплате)</option>
</select>
</label>
<div>
<select name="pay">
<option value="1">Оплата наличными при получении</option>
</select>
<label id='case2'>Выберете способ оплаты:
<select name="pay">
<option value="0"></option>
<option value="2">Предоплата на Яндекс деньги</option>
<option value="3">Предоплата на WebMoney</option>
</select>
</label>


из-за
<option value="1">Оплата наличными при получении</option>
не срабатывает проверка js
if ((f.dost.selectedIndex > 1) && (f.pay.selectedIndex == 0)) alert('Выберите способ оплаты!');

Dim@ 02.05.2013 20:32

silor,
так и не сработает - смените name у
<select name="pay">
<option value="1">Оплата наличными при получении</option>
</select>

к примеру на "pay2" или делайте такой JS:
if ((f.dost.selectedIndex > 1) && (document.getElementsByName("pay")[1].selectedIndex == 0)) alert('Выберите способ оплаты!');

несомненно лучше первый вариант

silor 02.05.2013 20:47

Dim@, дело в том, что сменить name не вариант, так как в базу заносится способ оплаты, собственно name "pay"

Dim@ 02.05.2013 20:52

silor,
ну юзайте второй вариант

silor 02.05.2013 20:53

а чем второй вариант хуже первого..?

Dim@ 02.05.2013 21:01

silor,
тем что если ВДРУГ перед:
<label id='case2'>Выберете способ оплаты:
<select name="pay">
<option value="0"></option>
<option value="2">Предоплата на Яндекс деньги</option>
<option value="3">Предоплата на WebMoney</option>
</select>
</label>
появится любой элемент с именем "pay", то код не заработает (как надо), лучший выход (мне так кажется) из такого положения присвоить
<select name="pay">
уникальный id и писать
if ((f.dost.selectedIndex > 1) && (document.getElementById("здесь id прописанный в html").selectedIndex == 0)) alert('Выберите способ оплаты!');

ksa 02.05.2013 23:14

silor, ты сам придумал проблему. А теперь пыжешся её преодалеть...

Не делай так и будет тебе счастие.

silor 03.05.2013 23:57

ksa, а как тогда выйти из этой проблемы? Если необходимо чтобы в базу данных заносился value со способом доставки и оплаты..

ksa 04.05.2013 00:23

Цитата:

Сообщение от silor
а как тогда выйти из этой проблемы? Если необходимо чтобы в базу данных заносился value со способом доставки и оплаты..

Да просто знать, что при первом варианте он всегда известен. Что только при втором варианте есть ветвление...

silor 04.05.2013 00:27

Тоесть в самой таблице указать единицу по умолчанию?
`pay` varchar(220) NOT NULL default '1',

ksa 04.05.2013 00:28

Цитата:

Сообщение от silor
Тоесть в самой таблице указать единицу по умолчанию?

Как вариант... :yes:

Либо при самой записи просто записать нужное значение...

silor 04.05.2013 00:29

А еще есть какие-то варианты..?

ksa 04.05.2013 00:30

Цитата:

Сообщение от silor
А еще есть какие-то варианты..?

я дописал выше :)

silor 04.05.2013 00:33

ага, вижу)) а как при записи записывать нужное значение? Если я делаю так:

$dost=$mysqli->real_escape_string(htmlspecialchars(trim($_POST['dost'])));
$pay=$mysqli->real_escape_string(htmlspecialchars(trim($_POST['pay'])));

$mysqli->query("INSERT INTO `zakaz` SET `name`='$name', `phone`='$phone', `dost`='$dost', `pay`='$pay';") or die(mysql_error());

ksa 04.05.2013 00:38

Цитата:

Сообщение от silor
а как при записи записывать нужное значение?

Да хоть бы так... :D

add(Dost,Pay)
   s:Dost=1 Pay=1
   &sql{
      INSERT INTO zakaz SET dost=:Dost, pay=:Pay;
   }
   q:$q 1
   q

silor 04.05.2013 00:41

не совсем понял, это шутка?)) это вообще какой язык?))

ksa 04.05.2013 00:45

Цитата:

Сообщение от silor
не совсем понял, это шутка?))

Мне например твой ПХП нафик не нужен... Ты мне на своём... Я тебе на своём... Так понятней! ;)

Цитата:

Сообщение от silor
это вообще какой язык?)

COS - Каше обжект скрипт...

Но не ужели идея не понятна? :blink:
Если dost=1, то pay просто равен 1! И пиши дальше в БД...

А еще писал ранее мол я пхэпист... Какой же ты пхэпист? Если таких простых приемов не знаешь? :D

silor 04.05.2013 00:59

суть уловил, пытаюсь теперь ее реазизовать..
Пишу:

//////бред

но чет не работает..


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