2009-11-18 39 views
10

什麼是通過JavaScript臨時禁用所有鼠標點擊/拖動等事件的最簡單方法?禁用頁面上的所有點擊事件(javascript)

我以爲我可以做document.onclick = function() { return false; }; ...等等,但這是行不通的。

+0

你的方式應該工作。我只是在這個頁面上用螢火蟲控制檯執行它,它工作。 – 2009-11-18 13:11:44

+1

mozilla對IE的事件命令有所不同,但不是嗎?我認爲我的方式不起作用,因爲clicked元素將在IE中的文檔之前處理事件? – fearofawhackplanet 2009-11-18 14:02:34

回答

0

如果的onclick = NULL已執行如何撤銷onclick事件正常運作..或

<a href="www.somesite.com" onclick="return yourFunction(this)">Link text</a> 

<script type="text/javascript"> 
function yourFunction(anchor) 
{ if(anchor.disabled) return; 
/* Your function here */ 
} 
</script> 
4

如果你想絕對沒有什麼可拖動/點擊,在輸入字段等禁用打字,我會考慮在整個頁面上顯示一個絕對定位的透明div,以便每次點擊都將在div上,這將無所作爲。這將給予你和這個點擊的禁用的關迅速而整齊的切換,而無需註冊聽衆堆

+0

我不認爲IE(至少7)正確地在完全透明的元素上觸發事件。我已經通過使用低透明度的白色div來工作,但我希望有更好的方法。 – fearofawhackplanet 2009-11-18 14:05:09

0

這篇文章很可能是有用的:

http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

一個特別的部分是一個遞歸函數,用於刪除所有點擊事件。請記住,如果點擊事件是使用jQuery創建的,jQuery將刪除點擊事件。文章中給出的函數將刪除使用jQuery創建的那些功能和那些沒有創建的功能。給出的函數是這樣的:

function RecursiveUnbind($jElement) { 
    // remove this element's and all of its children's click events 
    $jElement.unbind(); 
    $jElement.removeAttr('onclick'); 
    $jElement.children().each(function() { 
     RecursiveUnbind($(this)); 
    }); 
} 

你會調用該函數是這樣的:

RecursiveUnbind($('#container')); 

這個功能需要一個jQuery對象參數,但你可以很容易地改變它傳遞一個字符串作爲名稱元素的ID,或者你認爲是最好的。

13

如果目標是禁用整個頁面上點擊,那麼你可以做這樣的事情

document.addEventListener("click",handler,true); 

function handler(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
} 

中的addEventListener真正的論點將確保處理程序上的事件捕獲階段即在任何一個點擊執行元素將首先在文檔上被捕獲,並且在任何其他元素的偵聽器之前,將首先執行文檔的單擊事件的偵聽器。這裏的訣竅是阻止事件進一步傳播到下面的元素,從而結束調度過程以確保事件沒有達到目標。

你也需要停止與明確活動目標元素關聯的默認行爲,因爲他們會被默認執行後,即使事件已停止從上述

可以進一步修改,以進一步傳播分派進程已完成選擇性使用。

function handler(e){ 
if(e.target.className=="class_name"){ 
e.stopPropagation(); 
e.preventDefault(); 
} 

以這種方式修改的處理程序將僅對具有「class_name」類的元素禁用點擊。

function handler(e){ 
    if(e.target.className!=="class_name") 
    e.stopPropagation() 
} 

這將只啓用具有類「class_name」的元素的點擊。 希望這有助於:)

+0

如果您想再次啓用點擊,您如何刪除點擊監聽器? – 2017-03-09 02:08:30

+0

@RaviSankarRao你只需要調用'document.removeEventListener('click',handler)'當你想再次啓用點擊時:) – peernohell 2017-08-24 14:26:08

0

獲勝的回答運作良好,但如果你有通過捕捉true布爾值,你要刪除的監聽器的那一刻,你必須通過值完全相同。否則,偵聽器刪除將無法工作。

實施例:

聽者此外

document.addEventListener('click', DisableClickOnPage.handler, true);

聽者去除

document.removeEventListener('click', DisableClickOnPage.handler, true);

文檔:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

0

怎麼樣有一個變量的變化,並動態禁用所有mouseClicks?

var freezeClic = false; // just modify that variable to disable clics ! 

document.addEventListener("click", freezeClicFn, true); 

function freezeClicFn(e) { 
    if (freezeClic) { 
     e.stopPropagation(); 
     e.preventDefault(); 
    } 
} 

對於我而言,我的每一個「裝載機」電腦屏幕上顯示我轉freezeClic真假時,它的淡出:)

時候,我喜歡它,因爲它是不解除綁定...等,這可能是隻需幾秒鐘禁用clic即可。

相關問題