【发布时间】:2012-01-01 12:54:23
【问题描述】:
我有一个 <button> 元素,其中我有 2 个 <span> 元素。我为每个 span 元素附加了 2 个 jquery click 事件处理程序,因此我可以为每次点击做任何我喜欢的事情。下面是基本代码的快速浏览:
HTML
<button>
<span>Text1</span>
<span>Text2</span>
</button>
Javascript
$(function() {
$('button').bind('click', function() {
console.log('button clicked');
});
$('button > span:eq(0)').bind('click', function() {
console.log('text1 span clicked');
});
$('button > span:eq(1)').bind('click', function() {
console.log('text2 span clicked');
});
});
这在 Chrome 中一切正常,并且按正确的顺序捕获 click 事件:首先在任何 span 元素上,然后事件冒泡到父按钮元素。
问题在于,在 Firefox 中,任何 span 元素都不会触发 click 事件,只是按钮事件处理程序将事件记录为被触发。
这是一个小提琴,所以你可以明白我的意思:http://jsfiddle.net/spider/RGL7a/2/
谢谢
【问题讨论】:
-
我猜这一直没有解决?
-
@Shane 不幸的是,没有,据我所见,它可能永远不会,因为这在最新的 Firefox 版本中仍然不起作用。像 Bootstrap 这样的框架通过使用 two separate buttons 来实现这一点。而像 Foundation 或 YUI 这样的其他框架只是完全使用其他标记来模拟这个 split button 功能(Foundation Example 和 YUI Example)。
-
我通常使用 Boostrap 来实现这种功能,如果这不是一个选项,我会使用他们的策略,因为它在标记语义方面似乎是最好的。
-
我不情愿地切换到 div.button。这些按钮需要相互嵌套。我本可以将按钮放在顶部,但是我有一个模块结构,可以传递视图对象并期望每个模块有一个父级,这个父级是一个按钮,等等。角落案例!呵呵
标签: jquery firefox button event-bubbling