библиотека jQuery Показать/Скрыть параметры от одного раскрывающиеся, когда устанавливал на другое выберите раскрывающийся список выбраны
Мне нужно показать / скрыть параметры на одном раскрывающемся списке select, зависящем от другого выбора раскрывающихся параметров.
Приведенный ниже код показывает, чего я пытаюсь достичь.
Если параметр меню выбора "column_select" имеет значение "1 столбец", то в меню выбора "layout_select" должен отображаться только параметр "none".
Если выберите опцию меню 'column_select' значение 'столбец 2' тогда 'layout_select' выберите меню должно отображаться только макет 1 и макет 2' опции.
Если параметр меню выбора "column_select" имеет значение "3 столбца", то в меню выбора "layout_select" должны отображаться только параметры "layout 3", "layout 4" и "layout 5".
<select name="column_select" id="column_select">
<option value="col1">1 column</option>
<option value="col2">2 column</option>
<option value="col3">3 column</option>
</select>
<select name="layout_select" id="layout_select">
<!--Below shows when '1 column' is selected is hidden otherwise-->
<option value="col1">none</option>
<!--Below shows when '2 column' is selected is hidden otherwise-->
<option value="col2_ms">layout 1</option>
<option value="col2_sm">layout 2</option>
<!--Below shows when '3 column' is selected is hidden otherwise-->
<option value="col3_mss">layout 3</option>
<option value="col3_ssm">layout 4</option>
<option value="col3_sms">layout 5</option>
</select>
До сих пор все, что я пробовал, терпело полный провал.... Я новичок в jQuery. Если кто-нибудь сможет помочь, мы будем очень признательны. Спасибо!
6 ответов:
Попробуй -
$("#column_select").change(function () { $("#layout_select").children('option').hide(); $("#layout_select").children("option[value^=" + $(this).val() + "]").show() })Если вы собираетесь использовать это решение, вам нужно будет скрыть все элементы, кроме одного со значением 'none' в вашем документе.готовая функция -
$(document).ready(function() { $("#layout_select").children('option:gt(0)').hide(); $("#column_select").change(function() { $("#layout_select").children('option').hide(); $("#layout_select").children("option[value^=" + $(this).val() + "]").show() }) })Демо - http://jsfiddle.net/Mxkfr/2
EDIT
Возможно, я немного увлекся этим, но вот еще один пример, который использует кэш исходных параметров списка выбора, чтобы гарантировать, что список layout_select полностью сброшен/очищен (включая опция 'none') после изменения списка 'column_select' -
$(document).ready(function() { var optarray = $("#layout_select").children('option').map(function() { return { "value": this.value, "option": "<option value='" + this.value + "'>" + this.text + "</option>" } }) $("#column_select").change(function() { $("#layout_select").children('option').remove(); var addoptarr = []; for (i = 0; i < optarray.length; i++) { if (optarray[i].value.indexOf($(this).val()) > -1) { addoptarr.push(optarray[i].option); } } $("#layout_select").html(addoptarr.join('')) }).change(); })Демо - http://jsfiddle.net/N7Xpb/1/
Как насчет:
(Обновлено )
$("#column_select").change(function () { $("#layout_select") .find("option") .show() .not("option[value*='" + this.value + "']").hide(); $("#layout_select").val( $("#layout_select").find("option:visible:first").val()); }).change();(предполагая, что третий
optionдолжен иметь значениеcol3)Пример: http://jsfiddle.net/cL2tt/
Примечания:
- используйте
.change()событие для определения обработчика событий, который выполняется при изменении значенияselect#column_select..show()Всеoptions во второмselect..hide()Всеoptions во второмselectчейvalueне содержитvalueвыбранного параметра вselect#column_select, используя атрибут содержит селектор.
Немного поздно, возможно, но я бы предложил
$(document).ready(function() { var layout_select_html = $('#layout_select').html(); //save original dropdown list $("#column_select").change(function () { var cur_column_val = $(this).val(); //save the selected value of the first dropdown $('#layout_select').html(layout_select_html); //set original dropdown list back $('#layout_select').children('option').each(function(){ //loop through options if($(this).val().indexOf(cur_column_val)== -1){ //do your conditional and if it should not be in the dropdown list $(this).remove(); //remove option from list } }); });
Изначально оба выпадающих списка имеют одинаковую опцию, опция, выбранная в firstdropdown, скрыта во seconddropdown."значение" - это пользовательский атрибут, который является уникальным.
$(".seconddropdown option" ).each(function() { if(($(this).attr('value')==$(".firstdropdown option:selected").attr('value') )){ $(this).hide(); $(this).siblings().show(); } });
И в 2016 году.....Я делаю это (что работает во всех браузерах и не создает "нелегальный" html).
Для выпадающего списка выберите, чтобы показать / скрыть различные значения, добавьте это значение в качестве атрибута данных.
<select id="animal"> <option value="1" selected="selected">Dog</option> <option value="2">Cat</option> </select> <select id="name"> <option value=""></option> <option value="1" data-attribute="1">Rover</option> <option value="2" selected="selected" data-attribute="1">Lassie</option> <option value="3" data-attribute="1">Spot</option> <option value="4" data-attribute="2">Tiger</option> <option value="5" data-attribute="2">Fluffy</option> </select>Затем в jQuery добавьте событие изменения в первый раскрывающийся список выберите, чтобы отфильтровать второй раскрывающийся список.
$("#animal").change( function() { filterSelectOptions($("#name"), "data-attribute", $(this).val()); });И волшебная часть - это маленькая утилита jQuery.
function filterSelectOptions(selectElement, attributeName, attributeValue) { if (selectElement.data("currentFilter") != attributeValue) { selectElement.data("currentFilter", attributeValue); var originalHTML = selectElement.data("originalHTML"); if (originalHTML) selectElement.html(originalHTML) else { var clone = selectElement.clone(); clone.children("option[selected]").removeAttr("selected"); selectElement.data("originalHTML", clone.html()); } if (attributeValue) { selectElement.children("option:not([" + attributeName + "='" + attributeValue + "'],:not([" + attributeName + "]))").remove(); } } }Этот маленький драгоценный камень отслеживает текущий фильтр, если он отличается, он восстанавливает оригинал. выберите (все элементы), а затем удалите отфильтрованные элементы. Если элемент фильтра пуст, мы видим все элементы.
// find the first select and bind a click handler $('#column_select').bind('click', function(){ // retrieve the selected value var value = $(this).val(), // build a regular expression that does a head-match expression = new RegExp('^' + value), // find the second select $select = $('#layout_select); // hide all children (<option>s) of the second select, // check each element's value agains the regular expression built from the first select's value // show elements that match the expression $select.children().hide().filter(function(){ return !!$(this).val().match(expression); }).show(); });(это далеко не идеально, но должно привести вас туда...)
Comments