【发布时间】:2016-08-10 16:50:30
【问题描述】:
堆垛机,
我有一个奇怪的案例。有一个容器元素,其中包含其他一些具有“可点击”类的元素。可点击的“点击”事件侦听器使用委托附加到容器。
<input type="text"/>
<div class="container">
<div class="clickable">Click</div>
</div>
$container.on('click', '.clickable', incrementCounter);
容器外还有一个输入元素。在“更改”事件中,容器的内容在下一个事件循环轮次中被替换为相同的内容(使用 $container.html())(现实:-)。
$input.on('change', function() {
setTimeout(function() {
$container.html('<div class="clickable">Click</div>');
}, 0);
});
现在是这样:在输入字段中输入一些内容(不要单击任何位置或按 Enter)。然后立即点击可点击。
会发生什么:'change' 事件导致容器在下一个事件循环轮次中重新渲染,并且永远不会生成 'click' 事件。
可以通过将“click”事件替换为“mouseup”来解决。
问题:为什么会有这样的差异?
见plunk。
【问题讨论】:
-
请检查答案并接受或说它是否不够好。
-
谢谢@AndreiToutoukine :) 对答案的投票也将不胜感激!
标签: jquery click event-delegation mouseup