您可以使用"close" <select>
下拉菜单中的精巧技巧。
$('#test').click(function(){
$('#test').hide();
setTimeout(function(){
$('#test').show();
},20);
});
这似乎总是适用于Windows上的Chrome和Firefox。 IE在我的实际代码中工作,但是当我在IE中测试jsfiddle代码时,它不起作用。在Mac上,这对任何浏览器都不起作用。 Mac和Windows之间的区别在于,在Mac上,选项在它们自己的元素中打开(有点 - 检查页面显示没有新元素)。因此,下拉栏会隐藏并返回,但带有选项的新菜单不会被视为$('#test')
的一部分,因此它们不会隐藏。在Windows中,带有选项的菜单被视为$('#test')
的一部分,因此当您隐藏该菜单时,菜单会随之隐藏。
所以问题是,有没有办法“关闭”适用于任何浏览器和任何操作系统的<select>
下拉菜单?
我不是指使用.blur()
,这就是原因。我有一些模拟下拉菜单但实际上是<select multiple>
的代码。所以我只有一个正常<select>
可见,当我点击它时,我用绝对定位的<select multiple>
元素替换它。选择选项后,此消失,<select>
元素返回。对此的任何帮助都会很棒。
答案 0 :(得分:3)
我还没有测试过,但我想,你可以
$('select').blur();
或将注意力集中在其他东西上以关闭它
更新 - 哦,你去第一个评论者有小提琴
答案 1 :(得分:1)
如果您将活动从click
更改为focus
,则可能有所帮助:
$("#test").focus(function () {
// Your original code
// or: this.blur();
// just DON'T call this.focus()
});
答案 2 :(得分:0)
如何在.blur()
上使用click()
..很遗憾,我现在无法全部测试..
$('select').click(function(){
$(this).blur();
});
答案 3 :(得分:0)
select
不适用于此,但您可以为fake
select
布局创建一些其他标记。
HTML
JS
$('#test').click(function() {
$(this).toggleClass('open');
}).find('li').not(':first').on('hover',function() {
$(this).parent().removeClass('open');
});
CSS
ul {
list-style:none ;
border : solid 1px Gray;
width: 80px;
height: 20px;
overflow:hidden;
cursor:pointer;
}
ul.open {
height: 60px;
}
这是一个demo。您可以根据需要设置标记样式。