Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не выбирается нужный option в select (https://javascript.ru/forum/misc/72845-ne-vybiraetsya-nuzhnyjj-option-v-select.html)

the_little 02.03.2018 17:28

Цитата:

Сообщение от laimas (Сообщение 479611)
the_little,
j0hnik, уже написал, но учтите, что изменение состояние списка не обязательно произойдет, поэтому в вашей задаче, может лучше опрашивать сами списки, получая их значения?

т.е. мне нужно местами поменять все.

Сначала пойдут функции которые будут отвечать за поведение списков.

И уже после всех этих функций, я задаю переменные и получаю значения списков. Так?

А по коду подскажите еще
$('#srochnost').on('change', function() {
	        if(!this.value) return;
	        $('#rejim option').slice(0, -1)
	                          .prop('disabled', this.value==2)
	                          .end()
	                          .eq(3)
	                          .prop('selected', this.value==2)
					
});


Тут мы для опции 2 в первом списке подставляли опцию 3 во втором списке.

Если немного изменить задачу.

При выборе опции 2 в первом списке во втором нужно оставить например опции с value равным 5, 6, 7, 9, 13.
При выборе опции 3 в первом списке во втором нужно оставить например опции с value равным 1,2,3,8,12.

При этом опцию во втором списке подставлять и выбирать по умолчанию не нужно.

laimas 02.03.2018 17:49

Цитата:

Сообщение от the_little
А по коду подскажите еще

А что по нему подсказать? Здесь согласно условию вами описанному становятся доступными/недоступными для выбора соответствующие списки. Ведь то, что у вас

$('#rejim-opt-null').fadeOut();
$('#rejim-opt-day').fadeOut();
$('#rejim-opt-night').fadeOut();

и что можно написать проще:

$('#rejim-opt-null,#rejim-opt-day,#rejim-opt-night').fadeOut();

лишено смысла, так как всех этих эффектов пользователь все равно не увидит. Тогда уж просто css({dispalay: 'none/block'}).

Что касается каких-то сложных условий, как то при выборе второго списка скрыть 5, 6, 7, 9, 13, а третьего 1,2,3,8,12, то лучше эти параметры задать через атрибут. При выборе получать эти значения и скрывать указанные опции.

PS. Например так:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    $('#a').on('change', function() {
        var o = $(this).children(':selected').data('mod');
        $('#b').val('')
               .find('option')
               .show()
               .filter('[value='+o.join('],[value=')+']')
               .hide()
    })
});
</script>

<select id="a">
    <option value="" selected disabled>Select...</option>
    <option data-mod="[2,5,7,9]" value="1">Option 1</option>
    <option data-mod="[3,4,6,8,9]" value="2">Option 2</option>
</select>
 
<select id="b">
    <option value="">Select...</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
    <option value="6">Option 6</option>
    <option value="7">Option 7</option>
    <option value="8">Option 8</option>
    <option value="9">Option 9</option>
</select>

the_little 02.03.2018 21:25

Цитата:

Сообщение от laimas (Сообщение 479620)

Что касается каких-то сложных условий, как то при выборе второго списка скрыть 5, 6, 7, 9, 13, а третьего 1,2,3,8,12, то лучше эти параметры задать через атрибут. При выборе получать эти значения и скрывать указанные опции.

PS. Например так:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    $('#a').on('change', function() {
        var o = $(this).children(':selected').data('mod');
        $('#b').val('')
               .find('option')
               .show()
               .filter('[value='+o.join('],[value=')+']')
               .hide()
    })
});
</script>

<select id="a">
    <option value="" selected disabled>Select...</option>
    <option data-mod="[2,5,7,9]" value="1">Option 1</option>
    <option data-mod="[3,4,6,8,9]" value="2">Option 2</option>
</select>
 
<select id="b">
    <option value="">Select...</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
    <option value="6">Option 6</option>
    <option value="7">Option 7</option>
    <option value="8">Option 8</option>
    <option value="9">Option 9</option>
</select>

То что нужно! Только у меня не работает... В смысле тут не работает.

laimas 03.03.2018 01:58

Цитата:

Сообщение от the_little
В смысле тут не работает.

Код по запуску кнопкой "Просмотреть"? Он и в цитировании (чего не надо делать) работает. Нет в нем чего-то, что вызывало бы проблемы.

Фильтр лучше бы было задать так:

.filter(function() {
     return ~o.indexOf(+this.value)
     //или если с поддержкой IE8, то можно средствами JQ
     //return ~$.inArray(+this.value, o)
})


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