【发布时间】:2017-11-07 16:05:05
【问题描述】:
我正在尝试阻止 div 中所有锚点的事件传播,该事件附加了一个点击事件,但只有 .click jquery 函数会触发 e.stopPropagation();,.on('click', 'a', function()); 不会触发。
有效的代码示例,单击锚点时不会触发对 div 的单击
<div class="clickedDiv" data-url="http://myurl.com">
<a class="clickedA">my link</a>
</div>
<script>
$('.clickedA').click(function(e) {e.stopPropagation();});
$('.clickedDiv').click(function(e) {
var url = $(this).data('url');
window.location.href = url;
});
</script>
不起作用的代码示例,锚点上的点击会触发点击,锚点本身和 div
<div class="clickedDiv" data-url="http://myurl.com">
<a class="clickedA">my link</a>
</div>
<script>
$('.clickedDiv').on('click', 'a', function(e) {e.stopPropagation();});
$('.clickedDiv').click(function(e) {
var url = $(this).data('url');
window.location.href = url;
});
</script>
【问题讨论】:
-
通过让事件传播到父级来委托事件功能。当它到达父元素时,它已经传播出源元素。
-
或者,反过来说——如果你有阻止
a上的点击事件传播、冒泡——那么你的委托处理程序甚至不会火。
标签: javascript jquery stoppropagation