1

当我将单击处理程序绑定到禁用该元素的元素,然后尝试将另一个事件委托给它时,第二个事件不会触发。

有一个简单的解决方案吗?

演示

$('button').click(function() {
    log('first click fired');
    $(this).prop('disabled', true);
});
$('span').on('click', 'button', function() {
    log('second click fired');
});

HTML:

<span><button>click</button></span>

编辑:

澄清一下,在对象本身上设置点击事件将触发,如本编辑中所见,我希望能够通过委派来做到这一点

4

1 回答 1

4

禁用的元素不会触发鼠标事件,因为它们是......等待它......禁用。

由于它们不触发鼠标事件,因此没有事件冒泡到跨度,并且事件处理程序永远不会触发。

解决方案是不禁用该元素,据我所知,这几乎是唯一的解决方案,但是如果您解释为什么需要这种行为,也许有人可以帮助您解决问题?

编辑:

如果您创建自己的委托,它似乎确实有效:

$('span').on('click', function(e) {
    if (e.target.tagName.toLowerCase() === 'button')
        log('second click fired');
});

小提琴

于 2013-07-31T19:36:41.623 回答