【发布时间】:2015-10-12 11:58:30
【问题描述】:
我遇到了一个奇怪的案例,据我所知,两个应该表现相同的东西表现得完全不同。
如果我在一个页面上有两个选择菜单,一个是在 HTML 中硬编码的静态菜单,一个是在运行时使用 JQuery 附加到正文的。然后我禁用两个选择菜单中的第一个选项。显示时,两个菜单都按预期禁用了它们的第一个选项,但是动态附加的菜单会自动将值设置为第二个选项,而静态菜单仍然选择第一个选项。
http://jsfiddle.net/hm3xgkLg/1/
HTML:
<select class="dropMenu">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
<option value="4">fourth</option>
</select>
Javascript:
var arr = [
{val : 1, text: 'One'},
{val : 2, text: 'Two'},
{val : 3, text: 'Three'},
{val : 4, text: 'Four'}
];
var sel = $('<select class="dropMenu">').appendTo('body');
$(arr).each(function() {
sel.append($("<option>").attr('value',this.val).text(this.text));
});
$('.dropMenu option:nth-child(1)').attr('disabled', 'disabled');
为什么这两个看似相同的选择菜单表现不同?我希望两者都像静态菜单一样(保持第一个值被选中)这可能吗?
还应注意,我尝试将禁用功能包装在 $(document).ready 中以排除菜单尚未呈现但没有更改的问题。我还尝试使用两个不同的类和两个单独的调用来禁用这些选项,以确保它不会以某种方式发生冲突而没有任何变化。
【问题讨论】:
-
这里接受的答案中的方法似乎也适用于stackoverflow.com/questions/14227611/…,但我不完全理解为什么。 jsfiddle.net/hm3xgkLg/4
-
尝试在 setInterval 中设置
$('.dropMenu option:nth-child(1)').attr('disabled', 'disabled');
标签: javascript jquery html drop-down-menu