2017-02-28 35 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

相關問題