我有一个包含多个选项的下拉列表,每个选项都有一个name属性。当我选择一个选项时,需要出现一个不同的复选框列表 - 当选择另一个选项时,该复选框列表应该消失,另一个显示。
我创建了这些复选框列表,并为它们提供了与所选选项的name属性相关的ID。我正在尝试使用以下代码来显示正确的复选框列表
$(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>
答案 0 :(得分:46)
对于遇到这种情况的人,就像我一样。
正如其他人所说, name 不是选项元素的有效属性。将上面接受的答案与answer from this other question相结合,您得到:
$(this).find('option:selected').text();
答案 1 :(得分:35)
在您的代码this
中引用的选择元素不是选定的选项
要引用所选选项,您可以执行此操作 -
$(this).find('option:selected').attr("name");
答案 2 :(得分:3)
首先name
不是option
元素的有效属性。相反,您可以使用data
参数,如下所示:
<option value="foo" data-name="bar">Foo Bar</option>
您遇到的主要问题是JS正在查看name
元素的select
属性,而不是所选的选项。试试这个:
$('#band_type_choices').on('change', function() {
$('.checkboxlist').hide();
$('#checkboxlist_' + $('option:selected', this).data("name")).css("display", "block");
});
请注意引发更改事件的option:selected
上下文中的select
选择器。
答案 3 :(得分:1)
$(this).attr("name")
表示选择标记的名称而不是选项名称。
获取选项名称
$("#band_type_choices option:selected").attr('name');
答案 4 :(得分:1)
在选择选项上使用名称无效。
其他人建议使用data-属性,另一种是查找表
这里“this”指的是select,所以不需要“找到”选项
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();
});
});
.checkboxlist { display:none }
Choose acoustic to see the corresponding div
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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">
<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 :(得分:0)
该代码非常简单,让我们放置此代码
var name = $("#band_type_choices option:selected").text();
在这里,您不想使用$(this).find().text()
,可以直接输入ID名称并添加
option:selected
和text()
。
这将返回结果选项名称。最好试试这个...