首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锚包装器上的jQuery .one(“单击”)导致不遵循href

问锚包装器上的jQuery .one(“单击”)导致不遵循href
EN

Stack Overflow用户
提问于 2012-04-05 15:20:39
回答 1查看 3.6K关注 0票数 2

这是一段看似棘手的HTML/JS,它让我或jQuery抛出了一个循环(我的钱在我身上)。

这是在这把小提琴. 中被降级的

...but,这是一个场景。锚是用跨度包裹的:

代码语言:javascript
复制
<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()来短路具有相同结果的环路--参见小提琴)。

代码语言:javascript
复制
$('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();
});

当您单击链接本身时,您会注意到:

  1. onclick HTML属性被触发!
  2. jQuery点击开火!
  3. (span点击,让我们看看还有什么其他事件.)
  4. onclick HTML属性被触发!
  5. jQuery点击开火!
  6. href后面跟着

它循环通过JS事件一段额外的时间,因为事件冒泡到跨度,这是有点愚蠢和不雅,但完全期待,并有意义的我。这里的关键部分是,在所有JS事件结束之后,就会遵循href。

当您单击外部跨度时,这是事件的顺序:

  1. (span点击,让我们看看还有什么其他事件.)
  2. jQuery点击开火!
  3. onclick HTML属性被触发!
  4. .{蟋蟀!!}.

尽管锚的JS click事件已经启动,但的href从未被跟踪。

我猜想,.one()直到第二次从span中鼓起之后,才解除对span的单击事件的绑定,到那时,事件传播完全停止。由于href在所有单击事件完成后才会被跟踪,所以当信号在span上死亡时,anchor不知道如何触发转到href事件。

...but,真的是这样吗?怎么回事?

有什么更好的方法来解决这个问题(我希望避免JS出于各种原因从href中提取window.location并手动设置)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 15:25:10

链接在第一个实例中被遵循(当您直接单击它时),因为这是<a>标记的工作方式,并且没有一个处理程序要求取消默认行为。

通过jQuery显式地触发<a>标记上的“单击”并不遵循链接;这正是jQuery的工作方式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10031389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档