2015-04-20 2 views
1

У меня возникла проблема с отображением/скрытием моих div, которые зависят от выбранного значения «name».jQuery показать/скрыть div с опциями выбора по имени

Вот мой HTML:

<select name="selectVehicle" id="selectVehicle"> 
    <option name="A" value="A">Car</option> 
    <option name="C" value="C">Truck</option> 
    </select> 
    <div id="A" class="vehicle">+Car+</div> 
    <div id="C" class="vehicle" style="display:none;">+Truck+</div> 

... И мои JS:

$(function() { 
     $('#selectVehicle').change(function(){ 
      $('.vehicle').hide(); 
      $('#' + $(this).val()).show(); 
     }); 
    }); 

https://jsfiddle.net/wgee7ekh/1/

+1

В чем проблема, с которой вы сталкиваетесь? –

+0

Теперь он выбирает их из значения, но я хотел бы быть выбран по имени –

ответ

2

Вот как вы выберете на основе name атрибута:

$(function() { 
    $('#selectVehicle').change(function(){ 
     $('.vehicle').hide(); 
     $('#' + $(this).find('option:selected').attr('name')).show(); 
    }); 
}); 

Вот JSFiddle

+1

Спасибо, хороший парень! –

0

Вы можете использовать :selected, чтобы получить свойство name выбранного варианта.

$('#selectVehicle').change(function(){ 
    $('.vehicle').hide(); 
    $('#' + $(':selected',this).attr('name')).show(); 
}); 

Updated Fiddle

0

Вопрос заключается в том, что this в обработчике событий .change() является <select> элементом, не выбранный <option> элемента, но вы хотите, атрибут name от выбранного <option> элемента.

Вы можете получить выбранный вариант несколькими способами. Попросту Javascript, вы можете использовать .options массив и .selectedIndex свойство, как в this.options[this.selectedIndex], чтобы получить его, как это:

$(function() { 
    $('#selectVehicle').change(function(){ 
     $('.vehicle').hide(); 
     $('#' + this.options[this.selectedIndex].getAttribute("name")).show(); 
    }); 
}); 

jsFiddle: https://jsfiddle.net/jfriend00/upswtfeg/

или JQuery, вы можете использовать псевдо-селектор :selected в найти его, как это:

$(function() { 
    $('#selectVehicle').change(function(){ 
     $('.vehicle').hide(); 
     $('#' + $(this).find('option:selected').attr('name')).show(); 
    }); 
}); 

jsFiddle: https://jsfiddle.net/jfriend00/ywkd25w8/

+0

Не могли бы вы объяснить мне, как достичь этого с помощью идентификатора div? –

+0

@GabrielDichev - Я не понимаю, о чем вы спрашиваете. Я включил рабочую демонстрацию jsFiddle для обоих блоков кода, поэтому должно быть понятно, как они работают. Оба примера используют id div. Вы теперь просите сделать что-то другое? – jfriend00

+0

Я до сих пор не могу понять, почему этот ответ был отклонен. Я вижу два правильных примера того, как это можно сделать. Я вижу объяснение, которое не является обычным явлением в SO. Так что это неправильно? – Regent

Смежные вопросы