jQuery получить имя параметра select

у меня есть выпадающий список с несколькими вариантами, каждый вариант имеет атрибут name. Когда я выбираю опцию,должен появиться другой список флажков - когда выбран другой параметр, этот список флажков должен исчезнуть и отобразиться другой.

Я создал эти списки флажков и дал им идентификатор, который коррелирует с атрибутом name выбранного параметра. Я пытаюсь использовать следующий код для отображения правильного флажка список

$(document).ready(function(){

       $('#band_type_choices').on('change', function() {         
    $('.checkboxlist').hide();
    $('#checkboxlist_' + $(this).attr("name") ).css("display", "block");

});

но ничего не происходит.

вот мои выпадающие варианты:

<select id="band_type_choices">
    <option vlaue="0"></option>
    <option value="100" name="acoustic">Acoustic</option>
    <option value="0" name="jazz">Jazz/Easy Listening</option>
    <option value="0" name="acoustic_jazz">Acoustic + Jazz/Easy Listening</option>
    <option value="0" name="party">Party</option>
    <option value="0" name="acoustic_party">Acoustic + Party</option>
    <option value="0" name="jazz_party">Jazz/Easy Listening + Party</option>
    <option value="0" name="acoustic_jazz_party">Acoustic + Jazz/Easy Listening + Party</option>
 </select>

и пример одного из списков:

<div class="checkboxlist" id="checkboxlist_acoustic" style="display:none;">
<input type="checkbox" class="checkbox keys" name="keys" value="100" />Keys<br>
<input type="checkbox" class="checkbox acou_guit" name="acou_guit" value="100" />Acoustic Guitar<br>
<input type="checkbox" class="checkbox drums" name="drums" value="100" />Drums<br>
<input type="checkbox" class="checkbox alt_sax" name="alt_sax" value="100" />Alto Sax<br>
<input type="checkbox" class="checkbox ten_sax" name="ten_sax" value="100" />Tenor Sax<br>
<input type="checkbox" class="checkbox clarinet" name="clarinet" value="100" />Clarinet<br>
<input type="checkbox" class="checkbox trombone" name="trombone" value="100" />Trombone<br>
<input type="checkbox" class="checkbox trumpet" name="trumpet" value="100" />Trumpet<br>
<input type="checkbox" class="checkbox flute" name="flute" value="100" />Flute<br>
<input type="checkbox" class="checkbox cello" name="cello" value="100" />Cello<br>
<input type="checkbox" class="checkbox violin" name="violin" value="100" />Violin<br>
</div>

5 ответов


в кодеthis относится к элементу select, а не к выбранному параметру

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

$(this).find('option:selected').attr("name");

для всех, кто встречается так поздно, как я.

Как имя не является допустимым атрибутом опции элемент. Объединение принятого ответа выше с ответ на этот другой вопрос вы получаете:

$(this).find('option:selected').text();

во-первых name не является допустимым атрибутом option элемент. Вместо этого вы можете использовать на select элемент, а не выбранный вариант. Попробуйте это:

$('#band_type_choices').on('change', function() {         
    $('.checkboxlist').hide();
    $('#checkboxlist_' + $('option:selected', this).data("name")).css("display", "block");
});

Примечание option:selected селектор в контексте select что вызвало событие изменения.


 $(this).attr("name") 

означает имя тега select, а не имя параметра.

получить имя параметра

 $("#band_type_choices option:selected").attr('name');

использование name в опции select недопустимо.

другие предложили атрибут data, альтернативой является таблица поиска

здесь "это "относится к выбору, поэтому нет необходимости" находить " опцию

var names = ["","acoustic","jazz","acoustic_jazz","party","acoustic_party","jazz_party","acoustic_jazz_party"];

$(function() {
  $('#band_type_choices').on('change', function() {         
  $('.checkboxlist').hide();
  var idx = this.selectedIndex;
  if (idx >0) $('#checkboxlist_' + names[idx]).show();
});