Не выбирается нужный 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. В чем проблема? |
selected - это не атрибут, это свойство, то что задать выбор опции указав этот атрибут, не делает его атрибутом в полной мере.
$("#rejim [value='3']").prop("selected", true или 1 или что угодно что вернет булево значение true, хоть такое "qwerty"); Цитата:
|
Цитата:
$("#srochnost").bind("keyup change", function() { она не понимает что такое переменные есть srochnost и rejim т.е. если я их оттуда удаляю, то ничего не работает... |
Сделал так.
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); |
Что такое #srochnost? Если это список, то какой смысл в keyup?
Цитата:
<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, ибо они глобальные. Чего-то вы не досказываете. |
Цитата:
Механика происходящего здесь prop("selected", true): prop("selected", Boolean(указанное значение)), и не пустая строка конечно вернет true. |
<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> |
Это
$("#srochnost").bind("keyup change", function() { var srochnost = $('select[name=srochnost]').val(); мягко выражаясь глупость - в обработчике обращаться к самому себе через свое имя. $("#srochnost").on(" alert(this.value); //а не $('select[name=srochnost]').val(); |
И так не отрабатывает. Значение в 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); }); }); |
Цитата:
Это что-ли $("#rejim [value='3']").prop("selected", "3"); 3-й селект? Это глупость, сколько раз можно говорить? |
Часовой пояс GMT +3, время: 22:02. |