<p>选择:打开不起作用</p>

创建于 2013-12-22  ·  5评论  ·  资料来源: harvesthq/chosen

我试图在单击按钮后打开一个选择,但它不起作用。 如果我在触发器之后插入和 alert() 它会打开......
(使用选择的 v1.0 和 jquery)

例子:

<select id="select">
    <option value="1">a</option>
    <option value="2">b</option>
    <option value="3">c</option>
</select>
<br>
<button onclick="$('#select').trigger('chosen:open'); ">Press this button to open (doesnt work) </button>
<button onclick="$('#select').trigger('chosen:open'); alert('ups!');">Press this button to open (work???)</button>

<script>
$(document).ready(function() {
$('#select').chosen();
});
</script>

例如: http :

最有用的评论

当您单击该按钮时,Chosen 将接收chosen:open事件。 但是,该事件继续在 DOM 中冒泡,并且 Chosen 立即检测到对非活动 Chosen 元素的点击……所以它关闭了它。 说得通?

如果您使用的是内联 JS,最简单的解决方案是使用setTimeout来跳出当前事件堆栈:

onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"

不过,您几乎可以肯定不应该使用内联 JS。 如果您愿意,您仍然可以使用setTimeout ,但只需停止事件冒泡就足够了。

$('button').on("click", function(evt){
  evt.stopPropagation();
  $('#select').trigger('chosen:open');
});

我已经用这个工作代码更新了你的小提琴: http :

所有5条评论

在您的 Fiddle(在 Safari 中)中,这两个按钮都不适合我。

您使用的是什么浏览器/版本?

我用以下方法对其进行了测试:

  • 火狐 25.0.1
  • 歌剧 12.16
  • 铬 31.0.1650.63 m

第一个按钮不起作用
第二个按钮打开选项列表(仅在我关闭“警报”框时关闭)。

当您单击该按钮时,Chosen 将接收chosen:open事件。 但是,该事件继续在 DOM 中冒泡,并且 Chosen 立即检测到对非活动 Chosen 元素的点击……所以它关闭了它。 说得通?

如果您使用的是内联 JS,最简单的解决方案是使用setTimeout来跳出当前事件堆栈:

onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"

不过,您几乎可以肯定不应该使用内联 JS。 如果您愿意,您仍然可以使用setTimeout ,但只需停止事件冒泡就足够了。

$('button').on("click", function(evt){
  evt.stopPropagation();
  $('#select').trigger('chosen:open');
});

我已经用这个工作代码更新了你的小提琴: http :

谢谢@pfiller

谢谢@pfiller ,这个解决方案和解释为我节省了很多胃灼热!

此页面是否有帮助?
0 / 5 - 0 等级