我在绑定select
元素的jquery事件时遇到了这个问题。当我单击选择时,应该添加.focus
类。但是从下拉列表中选择一个选项会破坏逻辑。
==> JSFIDDLE
步骤:
- 点击选择
- 选择一个选项
- 单击"选择 -->
.focus
未添加
"
法典:
<a>
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
</a>
$('select').focusin(function(){
$(this).parent('a').addClass('focus');
});
$('select').bind('focusout change',function(){
$(this).parent('a').removeClass('focus');
});
问题的根源在于,您仅在选择聚焦时添加类,然后在选择值更改时将其删除。 类永远不会添加回来的原因是,当您选择其中一个选项时,所选内容永远不会失去焦点。 像这样的事情应该让你得到你所追求的行为:
$('select').click(function(){
$(this).parent('a').toggleClass('focus');
});
$('select').blur(function() {
$(this).parent('a').removeClass('focus');
});
编辑 - 我猜你想保留在选择选项时删除类的功能,这就是为什么我会绑定到单击而不是焦点和模糊。
这是因为选择该选项会从select
元素中删除焦点,就像您从select
中选择选项一样
所以这里正在发生关于选择的focusout
..所以这显然删除了select
父元素上的类..
此外,没有添加该类,因为此处的select
已经集中
所以改用 .blur() 和 .focus() 事件。
查看演示
你正在寻找这样的东西,但我可能是错的:
$('select').on("focus", function(){
$(this).parent('a').addClass('focus');
});
$('select').on('blur',function(){
$(this).parent('a').removeClass('focus');
});
使用on
绑定事件,并对选择框使用focus
和blur
事件。如果我正确理解了这个问题,这应该可以解决您的问题。
例