Event.PreventDefault()并不总是有效

时间:2017-02-28 09:10:33

标签: javascript jquery preventdefault

我只是想制作一个快速的用户脚本,以防止网站在新标签页中打开链接,因此我可以选择何时这样做。哦,小伙子。

我想使用普通的javascript;我认为这对于这么简单的任务来说已经足够了。我正在Quora进行所有测试,因为那是我决定编写那个小片段的地方。

嗯,没有用。我开始变得简单,并且由于失败而增加了我的代码的疯狂:链接保持打开无论有多少preventDefault(),返回false,阻止[*] Propagation(),eventListeners ...甚至修改dom以从其target =“_ blank”中剥离a元素。

最后,我咬紧牙关,用这个小片段尝试了jQuery:

$("a").click(function(event){
        event.preventDefault();
        alert("Was preventDefault() called: " + event.isDefaultPrevented());
    });

但这也没有任何好处。所以我放弃了。然后我意识到代码似乎适用于其他网站。 Quora.com除外。常规的Quora链接如下所示:

<a href="http://thewebsite.to/go"
    rel="noopener nofollow"
    target="_blank"
    onclick="return Q.openUrl(this);"
    class="external_link"
    data-qt-tooltip="thewebsite.to"
    data-tooltip="attached">
    Link text
</a>

当然,有很多废话,但我一直在逐个删除属性,直到裸露的骨头:<a href="http://thewebsite.to/go"></a>仍然无法正常工作。最重要的是,即使链接打开,event.isDefaultPrevented()也会返回true!

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:0)

您确定链接被选中了吗? 也许这有帮助:

$(document).on('click', 'a', function(e) {
    e.preventDefault();
});

答案 1 :(得分:0)

问题是a标签中的onclick定义。它会在您的代码执行任何操作之前创建一个新的on click事件侦听器。

要防止它,您必须使用事件订单,请参阅上一个问题:How to order events bound with jQuery