2009-11-18 622 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即可。

相关问题