这是一段看似棘手的HTML/JS,它让我或jQuery抛出了一个循环(我的钱在我身上)。
这是在这把小提琴. 中被降级的
...but,这是一个场景。锚是用跨度包裹的:
<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();
});当您单击链接本身时,您会注意到:
onclick HTML属性被触发!onclick HTML属性被触发!它循环通过JS事件一段额外的时间,因为事件冒泡到跨度,这是有点愚蠢和不雅,但完全期待,并有意义的我。这里的关键部分是,在所有JS事件结束之后,就会遵循href。
当您单击外部跨度时,这是事件的顺序:
onclick HTML属性被触发!尽管锚的JS click事件已经启动,但的href从未被跟踪。
我猜想,.one()直到第二次从span中鼓起之后,才解除对span的单击事件的绑定,到那时,事件传播完全停止。由于href在所有单击事件完成后才会被跟踪,所以当信号在span上死亡时,anchor不知道如何触发转到href事件。
...but,真的是这样吗?怎么回事?
有什么更好的方法来解决这个问题(我希望避免JS出于各种原因从href中提取window.location并手动设置)?
发布于 2012-04-05 15:25:10
链接在第一个实例中被遵循(当您直接单击它时),因为这是<a>标记的工作方式,并且没有一个处理程序要求取消默认行为。
通过jQuery显式地触发<a>标记上的“单击”并不遵循链接;这正是jQuery的工作方式。
https://stackoverflow.com/questions/10031389
复制相似问题