Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2018, 14:25
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Не выбирается нужный option в select
Здравствуйте.

Что-то я совсем не пойму как должна выглядеть структура скрипта в плане объявления функций...

У меня идет
$(document).ready(function() {

Потом я объявляю основные переменные с которыми буду работать
var amount 				= $('select[name=amount]').val();
	var srochnost 		= $('select[name=srochnost]').val(); 			// 1 - срочный, 2 - с проживанием
	var rejim 				= $('select[name=rejim]').val();					// 1 - дневной, 2 - ночной, 3 - суточный
	var skolko_chasov = $('select[name=skolko_chasov]').val();
	var skolko_dnej 	= $('select[name=skolko_dnej]').val();
	var mesto 				= $('select[name=mesto]').val();					// 1 - стационар, 2 - на дому
	var samoobsluj		= $('select[name=samoobsluj]').val();			// 1 - сам, 2 - частично, 3 - полностью
	var fiz_active 		= $('select[name=fiz_active]').val();			// 1 - ходит, 2 - сидит, 3 - лежит
	var ves 					= $('select[name=ves]').val();


Потом идет функция которая должна убирать несколько вариантов из селекта №3 в зависимости от того что выбрано Селекте №2.

$("#srochnost").bind("keyup change", function() {
		var srochnost 		= $('select[name=srochnost]').val(); 			// 1 - срочный, 2 - с проживанием
		var rejim 				= $('select[name=rejim]').val();					// 1 - дневной, 2 - ночной, 3 - суточный


		// Прописываем условия по которым часть опций скрывается либо проставляется автоматически

			if ( srochnost == 2 ) {
				$('#rejim-opt-null').fadeOut();
				$('#rejim-opt-day').fadeOut();
				$('#rejim-opt-night').fadeOut();
				$("#rejim [value='3']").attr("selected", "selected");
				rejim = 3;
			} else {
				$('#rejim-opt-null').fadeIn();
				$('#rejim-opt-day').fadeIn();
				$('#rejim-opt-night').fadeIn();
				$("#rejim [value='0']").attr("selected", "selected");
				rejim = 0;
			}

Тут приходится снова объявлять те переменные что были объявлены в самом начале...

В одну сторону все работает. А вот когда в селекте 2 значение меняется на отличное от 2, то в селекте 3 остается активным пункт 3. В чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2018, 14:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

selected - это не атрибут, это свойство, то что задать выбор опции указав этот атрибут, не делает его атрибутом в полной мере.

$("#rejim [value='3']").prop("selected", true или 1 или что угодно что вернет булево значение true, хоть такое "qwerty");

Сообщение от the_little
Тут приходится снова объявлять те переменные что были объявлены в самом начале...
Зачем?
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2018, 14:57
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от laimas Посмотреть сообщение
Зачем?
Ну получается внутри это функции
$("#srochnost").bind("keyup change", function() {

она не понимает что такое переменные есть
srochnost
и rejim

т.е. если я их оттуда удаляю, то ничего не работает...
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2018, 15:03
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сделал так.
if ( srochnost == 2 ) {
				$('#rejim-opt-null').fadeOut();
				$('#rejim-opt-day').fadeOut();
				$('#rejim-opt-night').fadeOut();
				$("#rejim [value='3']").prop("selected", "true");				
			} else {
				$('#rejim-opt-null').fadeIn();
				$('#rejim-opt-day').fadeIn();
				$('#rejim-opt-night').fadeIn();
				$("#rejim [value='0']").prop("selected", "true");
			}


работает, но через шаг...
Т.е. когда srochnost == 2 выбирает нужный пункт, делает его активным, но значение остается = 0.
А когда я переключаю первый селектор на 1, то сбрасывается во втором селект, как и должен, но значение как раз устанавливается 3.

Проверяю я это через
console.log("Количество " + amount + "\n" +
								"Срочность " + srochnost + "\n" +
								"Режим " + rejim + "\n" +
								"Часов " + skolko_chasov + "\n" +
								"Дней " + skolko_dnej + "\n" +
								"Место " + mesto + "\n" +
								"Самообслуживание " + samoobsluj + "\n" +
								"Физактив. " + fiz_active + "\n" +
								"Вес " + ves);
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2018, 15:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Что такое #srochnost? Если это список, то какой смысл в keyup?

Сообщение от the_little
она не понимает что такое переменные есть
srochnost
и rejim
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    var a = 1, b = 2;
    $('select').on('change', function() {
        alert(a)
    })
});
</script>
<select>
    <option value="1">aaa</option>
    <option value="2">bbb</option>
</select>


Естественно в обработчике будут доступны и а, и b, ибо они глобальные. Чего-то вы не досказываете.
Ответить с цитированием
  #6 (permalink)  
Старый 02.03.2018, 15:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от the_little
$("#rejim [value='3']").prop("selected", "true"); 
$("#rejim [value='3']").prop("selected", true); - это булево значение, а не строковое.

Механика происходящего здесь prop("selected", true):

prop("selected", Boolean(указанное значение)), и не пустая строка конечно вернет true.
Ответить с цитированием
  #7 (permalink)  
Старый 02.03.2018, 15:27
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

<script>$(document).ready(function() {

	// Объявляем переменные по первому шагу формы

	var amount 				= $('select[name=amount]').val();
	var srochnost 		= $('select[name=srochnost]').val(); 			// 1 - срочный, 2 - с проживанием
	var rejim 				= $('select[name=rejim]').val();					// 1 - дневной, 2 - ночной, 3 - суточный
	var skolko_chasov = $('select[name=skolko_chasov]').val();
	var skolko_dnej 	= $('select[name=skolko_dnej]').val();
	var mesto 				= $('select[name=mesto]').val();					// 1 - стационар, 2 - на дому
	var samoobsluj		= $('select[name=samoobsluj]').val();			// 1 - сам, 2 - частично, 3 - полностью
	var fiz_active 		= $('select[name=fiz_active]').val();			// 1 - ходит, 2 - сидит, 3 - лежит
	var ves 					= $('select[name=ves]').val();


	$("#srochnost").bind("keyup change", function() {

		var srochnost 		= $('select[name=srochnost]').val(); 			// 1 - срочный, 2 - с проживанием
		var rejim 				= $('select[name=rejim]').val();					// 1 - дневной, 2 - ночной, 3 - суточный

		// Прописываем условия по которым часть опций скрывается либо проставляется автоматически

			if ( srochnost == 2 ) {
				$('#rejim-opt-null').fadeOut();
				$('#rejim-opt-day').fadeOut();
				$('#rejim-opt-night').fadeOut();
				$("#rejim [value='3']").prop("selected", "3");
			} else {
				$('#rejim-opt-null').fadeIn();
				$('#rejim-opt-day').fadeIn();
				$('#rejim-opt-night').fadeIn();
				$("#rejim [value='0']").prop("selected", "0");
			}


		console.log("Количество " + amount + "\n" +
								"Срочность " + srochnost + "\n" +
								"Режим " + rejim + "\n" +
								"Часов " + skolko_chasov + "\n" +
								"Дней " + skolko_dnej + "\n" +
								"Место " + mesto + "\n" +
								"Самообслуживание " + samoobsluj + "\n" +
								"Физактив. " + fiz_active + "\n" +
								"Вес " + ves);
	});

});</script>

                        <select class="form-control" name="srochnost" id="srochnost">
                          <option value="0">Выбрать...</option>
                          <option value="1">Срочный</option>
                          <option value="2">С проживанием</option>
                        </select>

                        <select class="form-control" name="rejim" id="rejim">
                          <option id="rejim-opt-null" value="0">Выбрать...</option>
                          <option id="rejim-opt-day" value="1">Дневной</option>
                          <option id="rejim-opt-night"value="2">Ночной</option>
                          <option id="rejim-opt-sutki" value="3">Суточный</option>
                        </select>

Последний раз редактировалось the_little, 02.03.2018 в 15:34.
Ответить с цитированием
  #8 (permalink)  
Старый 02.03.2018, 15:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Это

$("#srochnost").bind("keyup change", function() {
var srochnost = $('select[name=srochnost]').val();

мягко выражаясь глупость - в обработчике обращаться к самому себе через свое имя.

$("#srochnost").on("keyup change", function() {
alert(this.value); //а не $('select[name=srochnost]').val();
Ответить с цитированием
  #9 (permalink)  
Старый 02.03.2018, 15:40
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

И так не отрабатывает. Значение в 3-ем селекте просто не меняется и все.
$(function() {

	var amount 				= $('select[name=amount]').val();
	var srochnost 		= $('select[name=srochnost]').val(); 			// 1 - срочный, 2 - с проживанием
	var rejim 				= $('select[name=rejim]').val();					// 1 - дневной, 2 - ночной, 3 - суточный

	$("#srochnost").on("change", function() {

			if ( srochnost == 2 ) {
				$('#rejim-opt-null').fadeOut();
				$('#rejim-opt-day').fadeOut();
				$('#rejim-opt-night').fadeOut();
				$("#rejim [value='3']").prop("selected", "3");
			} else {
				$('#rejim-opt-null').fadeIn();
				$('#rejim-opt-day').fadeIn();
				$('#rejim-opt-night').fadeIn();
				$("#rejim [value='0']").prop("selected", "0");
			}


		console.log("Количество " + amount + "\n" +
								"Срочность " + srochnost + "\n" +
								"Режим " + rejim + "\n" +
								"Часов " + skolko_chasov + "\n" +
								"Дней " + skolko_dnej + "\n" +
								"Место " + mesto + "\n" +
								"Самообслуживание " + samoobsluj + "\n" +
								"Физактив. " + fiz_active + "\n" +
								"Вес " + ves);
	});

});
Ответить с цитированием
  #10 (permalink)  
Старый 02.03.2018, 15:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от the_little
Значение в 3-ем селекте просто не меняется и все.
В каком третьем ? Чего вообще нужно сделать, словами опишите.

Это что-ли $("#rejim [value='3']").prop("selected", "3"); 3-й селект?

Это глупость, сколько раз можно говорить?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
select - большое количество option kot_k_k (X)HTML/CSS 3 08.09.2017 16:34
Содержимое option по клику на select wwonder Общие вопросы Javascript 5 18.04.2017 14:12
Значение из select option vnmslf jQuery 19 21.07.2016 12:09
Подправьте скрипт, в одну строчку :)(Выбор Option в динамическом Select) ScribaXXI Общие вопросы Javascript 1 10.02.2016 07:32
Java Script, совместная работа textarea с select option Алекс_ Элементы интерфейса 1 12.05.2015 08:13