Javascript 是否有一种通用的方法来“关闭”一个下拉菜单(not.blur())?
有一个巧妙的技巧,你可以使用下拉菜单Javascript 是否有一种通用的方法来“关闭”一个下拉菜单(not.blur())?,javascript,jquery,html,drop-down-menu,Javascript,Jquery,Html,Drop Down Menu,有一个巧妙的技巧,你可以使用下拉菜单 $('#test').click(function(){ $('#test').hide(); setTimeout(function(){ $('#test').show(); },20); }); 这似乎总是适用于Windows上的Chrome和Firefox。IE在我的实际代码中工作,但当我在IE中测试JSFIDLE代码时,它不工作。在mac电脑上,这不适用于任何浏览器。Mac和Windows的区别在于,在M
$('#test').click(function(){
$('#test').hide();
setTimeout(function(){
$('#test').show();
},20);
});
这似乎总是适用于Windows上的Chrome和Firefox。IE在我的实际代码中工作,但当我在IE中测试JSFIDLE代码时,它不工作。在mac电脑上,这不适用于任何浏览器。Mac和Windows的区别在于,在Mac上,选项是在它们自己的元素中打开的——检查页面时不会显示任何新元素。因此,下拉栏会隐藏并返回,但带有选项的新菜单不被视为$'test'的一部分,因此它们不会隐藏。在Windows中,带有选项的菜单被视为$'test'的一部分,因此当您隐藏该菜单时,该菜单将随之隐藏
所以问题是,有没有一种方法可以关闭任何浏览器和操作系统上的下拉菜单?
更新
我不是说用模糊,这就是原因。我有一些模拟下拉菜单的代码,但实际上是。所以我只有一个普通可见的元素,当我点击它时,我会用一个绝对定位的元素替换它。选择选项后,该选项消失,元素返回。这方面的任何帮助都会很好。我还没有测试过它,但我想,你可以
$('select').blur();
或者把注意力放在别的事情上,来结束它
更新-哦,你看,第一个评论员有小提琴如何使用.blur点击。。不幸的是,我现在不能全部测试
$('select').click(function(){
$(this).blur();
});
演示:选择并不适用于此,但是您可以创建一些其他标记来伪造选择布局
HTML
选择1
选择2
选择3
JS
CSS
这是一个例子。您可以根据需要设置标记的样式。如果将事件从单击更改为焦点,可能会有帮助:
$("#test").focus(function () {
// Your original code
// or: this.blur();
// just DON'T call this.focus()
});
$'test'怎么样?单击函数{$this.blur;};->Try:var t=this,p=t.parentNode,n=t.nextSibling;然后在回调中:p.insertBeforet,n;正如您所知,Webkits浏览器在选择和单击事件方面存在问题。我很确定其他浏览器也会出现这种情况。下面是一个演示:我在设置超时之前添加了一个.removeChild,以防它提供更好的结果。与其单击,不如使用聚焦?我不是说在选择项目后关闭下拉菜单。我的意思是立即关闭它,这样用户就不能选择一个项目。@Aust你到底为什么要这样做?如果这就是目标,为什么不在选择标记中添加一个禁用的属性呢?为什么要给用户打开和关闭菜单的奇怪体验?@Phrogz,@redlena-哈哈,我所做的是,当用户打开下拉菜单时,它会隐藏下拉菜单,并显示一个具有相同选项的列表,而不是绝对定位的列表。它是用于用户界面的。下拉列表比@Aust漂亮得多。在webkit浏览器中,显示下拉选项的方式似乎不同。->即使焦点在下一个元素中,也会显示下拉选项。如果您要使用UI,则可以在提交时进行下拉,而无需使用select和use js填充表单元素。我认为scion.ca的形式中有类似的东西
ul {
list-style:none ;
border : solid 1px Gray;
width: 80px;
height: 20px;
overflow:hidden;
cursor:pointer;
}
ul.open {
height: 60px;
}
$("#test").focus(function () {
// Your original code
// or: this.blur();
// just DON'T call this.focus()
});