这是一个看似棘手的HTML / JS,让我或jQuery抛出一个循环(我的钱在我身上)。
它在this fiddle演示。
......但这是场景。一个锚包裹着一个span:
<span> the span
<a onclick="alert('onclick HTML attritbute fired!')" href="http://www.href-attribute- fired.com">the link</a>
wraps the link
</span>
span包含一个单击处理程序,可单击该锚点。这需要.one()
以避免因事件冒泡而永远循环(我还尝试.on()
和.off()
以相同的结果短路循环 - 请参阅小提琴。)
$('a').click(function() {
alert("jQuery click fired!");
});
$('span').one("click", function() {
alert('(span clicked, let us see what other events fire...)');
$(this).find('a').click();
});
当您点击链接本身时,您会注意到:
它通过JS事件循环一段额外的时间,因为事件冒泡到跨度,这是一个有点愚蠢和不优雅但完全预期和对我有意义。这里的关键部分是,在完成所有JS事件之后,跟随href 。
单击外跨区时,这是事件的顺序:
即使主播的JS click
事件被触发,仍然不会跟踪href 。
我猜测.one()
在span
冒出后,anchor
没有取消绑定span
的点击事件。 ,此时,事件传播完全消失。由于直到所有点击事件都完成后才会跟踪href,当信号在anchor
处死亡时,window.location
不知道要触发go-to-href事件。
......但是真的发生了什么?是什么赋予了?
有什么更好的方法可以解决这个问题(我想避免JS因为各种原因而手动设置{{1}})?
答案 0 :(得分:4)
第一个实例(直接点击它)时会跟踪链接,因为这是<a>
标记的工作方式,并且没有任何处理程序要求取消默认行为。
在<a>
标记上通过jQuery触发“点击”显然不会跟随链接;这就是jQuery的工作原理。