我试图在单击按钮后打开一个选择,但它不起作用。 如果我在触发器之后插入和 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 :
在您的 Fiddle(在 Safari 中)中,这两个按钮都不适合我。
您使用的是什么浏览器/版本?
我用以下方法对其进行了测试:
第一个按钮不起作用
第二个按钮打开选项列表(仅在我关闭“警报”框时关闭)。
当您单击该按钮时,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 ,这个解决方案和解释为我节省了很多胃灼热!
最有用的评论
当您单击该按钮时,Chosen 将接收
chosen:open
事件。 但是,该事件继续在 DOM 中冒泡,并且 Chosen 立即检测到对非活动 Chosen 元素的点击……所以它关闭了它。 说得通?如果您使用的是内联 JS,最简单的解决方案是使用
setTimeout
来跳出当前事件堆栈:不过,您几乎可以肯定不应该使用内联 JS。 如果您愿意,您仍然可以使用
setTimeout
,但只需停止事件冒泡就足够了。我已经用这个工作代码更新了你的小提琴: http :