2017-02-28 81 views
1

我只是想制作一个快速的用户脚本来防止网站在新标签中打开链接,所以我可以选择何时这样做。好家伙。Event.PreventDefault()并不总是起作用

我想用普通的javascript;我认为完成这么简单的任务已经足够了。我在Quora做了所有的测试,因为那是我决定编写这个小片段的地方。

嗯,没有任何工作。我开始简单,并因为失败而增加了我的代码的疯狂性:无论有多少个preventDefault(),返回false,阻止[*] Propagation(),eventListeners,甚至修改链接,都会打开 dom从目标中剥离a元素=“_ blank”。

最终,我咬我的舌头,并试图用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!

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

+0

这有一个内嵌的事件处理程序。那是动态创建的吗? – Jai

+0

这很可能,为什么? –

回答

0

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

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

$(document).on('click','a',function(e){is more specific and fast。 –

+0

@ A.T。i changed it – Sojtin

0

的问题是在标签的onclick定义。它会在代码执行任何操作之前创建一个新的点击事件监听器。

为了防止它,你将不得不玩的事件顺序,看到这个前面的问题:How to order events bound with jQuery

相关问题