【问题标题】:Using BOTH Href & click listener使用 BOTH Href 和点击监听器
【发布时间】:2012-02-18 07:02:37
【问题描述】:

我正在开发一个浏览器插件,我希望它在用户点击某些东西时表现出某种特定的行为。不限于但包括链接行为!

问题是插件必须适用于各种各样的网站,其中一些网站使用可怕的伪协议,例如:
<a href="javascript: showSomeElement();">Show Element</a>

目前我的行为通过
anchor.addEventListener('click', superAwesomeFunction);添加到锚标记

不幸的是,这有一个问题,点击侦听器只触发一次。如果我preventDefault() 当然点击监听器会留下来,但我现在已经破坏了主机站点!否则,单击链接会触发单击侦听器,但仅在第一次单击时触发。我想知道如果第二次单击链接,为什么我的 superAwesomeFunction() 不会再次触发。 href="javascript:things()" 做的比我知道的多吗?

【问题讨论】:

  • <a> 元素是否被替换?
  • 当我使用 Firebug 进行测试时,它不会被替换。
  • 您的描述有点令人困惑。 superAwesomeFunction 没有触发,但 showSomeElement 触发了吗?
  • 两者都会触发,但仅在第一次点击链接时触发。第二次点击时,只有 shoeSomeElement 触发。
  • 试图提供帮助,但我无法复制。也许你可以调整这个小提琴来更像你的情况:jsfiddle.net/97Hy7

标签: javascript anchor href addeventlistener


【解决方案1】:

可以将事件侦听器添加到在href 属性中设置了JavaScript 函数调用的链接。

这是一个jsFiddle,表明它正在工作。每次单击链接时都会触发这两个函数。

除了您提供给我们的代码之外,您的代码肯定还有其他问题。

【讨论】:

  • 我越来越想这一定是这样。现在,我将把这个作为答案。如果有更多事情发生,我会跟进,当我明天有机会更深入地了解这一点时。
  • 历史上的跟进!您是绝对正确的,问题是主机站点将用一个完全相同的新节点替换该节点,而没有任何充分的理由这样做。上帝我讨厌那个网站...
【解决方案2】:

如果您必须等待用户一段时间并继续访问 url,您可以在 superAwesomeFunction 的进程结束时添加一些代码:

document.location.href = $(this).attr("href");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多