Показать div на основе опции выбора?

0

У меня возникают проблемы с созданием кода. Я пытаюсь показать/скрыть div на основе выбора варианта выбора, в общей сложности 4 варианта.

Есть два элемента выбора

<select>
    <option value="value1">Value 1</option>
    <option value="value2">Value 2</option>
</select>

<select>
    <option value="value3">Value 3</option>
    <option value="value4">Value 4</option>
</select>

Комбинации были бы

value1-value3 value1-value4

value2-value3 value2-value4

Второй элемент select пуст, пока вы не выберете из первого элемента select, а затем вы сможете выбрать из второго элемента и отобразить div для этого значения.

Дива будет.

<div id="value-1-3">value1-value3</div>
<div id="value-1-4">value1-value4</div>

<div id="value-2-3">value2-value3</div>
<div id="value-2-4">value2-value4</div>

Можете ли вы, ребята, помочь мне сделать это?

  • 4
    whathaveyoutried.com ? Пожалуйста, покажите нам, что у вас есть. SO не является службой написания кода, и вы получите лучший ответ, если представите доказательства своей работы. Пожалуйста, смотрите страницы справки .
  • 0
    Этого легче всего достичь с помощью довольно простого jQuery. Нам нужно посмотреть, какой код JS / jQuery вы написали и попробовали до сих пор.

3 ответа

2

Я бы дал некоторые идентификаторы вашим selects, для этого примера, можно использовать sel1 и sel2 соответственно. Я бы также изменил value в option чтобы просто быть числом, иначе потребуется некоторое обрезка value или регулярного выражения:

$("#sel1").change(function() {
    $("#sel2").prop("disabled", false); //enable the second select
    $("#sel2").change(); //trigger a change event on select2
});

$("#sel2").change(function() {
    //Gather your select values
    var sel1Value = $("#sel1").val();
    var sel2Value = this.value;

    //Concatenate a selector and show it!
    $("div").hide(); //hide previously shown divs
    $("#value-" + sel1Value + "-" + sel2Value).show();
});

Скрипт: http://jsfiddle.net/b7Q8s/18/

  • 0
    но это не будет работать, если вы измените #sel1 во второй раз после изменения #sel2 .
  • 0
    @Danny - Обновлено, исправлено.
0

Мое собственное предложение было бы:

/* a more precise selector would be useful, whether by specifying an ancestor or
   by adding an id to the select elements. Binding the change event-handler: */
$('select').change(function(){
    /* creating the id of the relevant element to show using map(),
       to the string 'value-' plus whatever the map(), and get(), methods return: */
    $('#value-' + $('select option:selected').map(function(){
        // removing all non-numeric characters, returning the numbers:
        return this.value.replace(/\D+/g,'');
    /* forming an array with get(),
       joining the array elements together with hyphens, with join(),
       showing the element whose id matches the created string
       selecting siblings, removing the select elements from that selection,
       and hiding them: */
    }).get().join('-')).show().siblings().not('select').hide();
/* triggering the change event so the above always only shows/hides
   the relevant elements on loading the DOM: */
}).change();

Демо-версия JS Fiddle.

Это не переключает отображение второго элемента выбора по дизайну, поскольку я, честно говоря, не вижу необходимости, поскольку первый select всегда будет иметь выбранный, выбранный option (даже если только по умолчанию) и будет, в противном случае, требуется невыбранный вариант будет выбрано, чтобы начать выберите change событие (даже если вы хотите, чтобы выбрать option, который уже выбран).

Рекомендации:

0

Пытаться

var $divs = $('div[id^="value-"]').hide();

var $sel1 = $('#sel1').one('change', function(){
    $sel2.prop('disabled', false);
});
var $sel2 = $('#sel2');

$sel1.add($sel2).change(function(){
    var p1 = $sel1.val().replace(/\D+/, '');
    var p2 = $sel2.val().replace(/\D+/, '');
    $divs.hide();
    $('#value-' + p1 + '-' + p2).show();
})

Демо: скрипка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню