禁用页面上的所有单击事件(javascript)
通过javascript临时禁用所有鼠标点击/拖动等事件的最简单方法是什么禁用页面上的所有单击事件(javascript),javascript,Javascript,通过javascript临时禁用所有鼠标点击/拖动等事件的最简单方法是什么 我想我可以做document.onclick=function(){return false;}…等,但这不起作用。如果已执行onclick=null,如何撤销onclick事件以使其正常运行。。或 <a href="www.somesite.com" onclick="return yourFunction(this)">Link text</a> <script type="text/
我想我可以做
document.onclick=function(){return false;}代码>…等,但这不起作用。如果已执行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>
功能(锚定)
{如果(锚定已禁用)返回;
/*你在这里的职能*/
}
< /代码> 如果您绝对不想拖动/可点击,输入字段中禁用键入等,我会考虑在整个页面上显示一个绝对定位的透明div,以便每次单击都将在div上,这将无所作为。这将允许您快速、整洁地打开和关闭此单击禁用器,而无需注册大量侦听器。本文可能会很有用:
其中一个特别的部分是一个递归函数,用于删除所有单击事件。请记住,如果单击事件是使用jQuery创建的,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名称,或者以您认为最好的方式传递。如果目标是禁用整个页面上的单击,那么您可以这样做
document.addEventListener("click",handler,true);
function handler(e){
e.stopPropagation();
e.preventDefault();
}
addEventListener中的true参数将确保在事件捕获阶段执行处理程序,即首先在文档上捕获对任何元素的单击,然后在对任何其他元素的侦听器之前执行文档的click事件的侦听器。这里的技巧是阻止事件进一步传播到下面的元素,从而结束分派过程,以确保事件不会到达目标
此外,您还需要显式停止与事件目标元素关联的默认行为,因为即使事件停止从上面进一步传播,在分派过程完成后默认情况下也会执行这些元素
可以进一步修改以选择性地使用
function handler(e){
if(e.target.className=="class_name"){
e.stopPropagation();
e.preventDefault();
}
以这种方式修改的处理程序将仅禁用对类为“class_name”的元素的单击
这将只允许单击类为“class_name”的元素。
希望这有帮助:)获胜的答案效果很好,但是如果您通过了捕获true
布尔值,那么在您想要删除侦听器的时候,您必须通过完全相同的值。否则,侦听器删除将不起作用
例如:
添加侦听器
document.addEventListener('click',DisableClickOnPage.handler,true)代码>
侦听器删除
document.removeEventListener('click',DisableClickOnPage.handler,true)代码>
文档:动态禁用页面上的所有单击
let freezeClic=false;//只需修改该变量即可禁用所有clics事件
document.addEventListener(“单击”,e=>{
如果(冻结CLIC){
e、 停止传播();
e、 预防默认值();
}
},对);
我经常在加载时使用它,或者是为了避免用户在一个动作按钮上不小心点击两次。简单且性能友好:)
请
替代CSS方法
另一个我非常喜欢的,因为用户得到的视觉反馈是:
/*style.css*/
.装货{
游标:等待;/*忙游标反馈*/
}
.装货*{
/*禁用子元素上的所有鼠标事件*/
指针事件:无;
}
那么你只需要做:
$(“#我的项目”).addClass('loading');
wait myAsyncFunction()//等待函数完成
$(“#我的项目”).removeClass('loading');
如果我们在文档中添加了一个监听器,而不是在窗口中添加监听器,那么任何人都可以在窗口中添加一个监听器,并且它可以正常工作。因为文档是窗口的子项,其事件总是在窗口事件之后触发
我们使用了3种对象方法
用于防止所有捕获和冒泡
对于阻止相同的侦听器(例如,另一个窗口单击侦听器)
用于防止所有用户代理事件(例如锚href或表单提交)
要防止事件的默认行为,请在事件处理程序中使用和。不要忘记,返回false
是另一种指示要取消默认操作的方法
事件属性returnValue指示是否已阻止此事件的默认操作。默认情况下,它设置为true,允许执行默认操作。将此属性设置为false可防止执行默认操作。(来源:)
通常,当任何函数有任何有意义或有用的用途时,我们都会从该函数返回一个值--return false
取消事件是有意义的,因为它指示失败的事件,它是有用的,因为事件处理程序使用它
为了实现最大的跨浏览器兼容性,请记住返回false代码>
document.addEventListener("click",handler,true);
function handler(e){
e.stopPropagation();
e.preventDefault();
return false;
}
你的方法应该奏效。我刚刚用firebug控制台在这个页面上执行了它,它工作了。mozilla命令事件的方式与IE不同,不是吗?我认为我的方法不起作用,因为单击的元素将在IE中的文档之前处理事件?请标记一个获奖答案。谢谢我认为IE(至少7个)不能正确地在完全透明的元素上触发事件。我已经通过使用低透明度的白色div实现了,但我希望有更好的方法。如果要再次启用单击,如何删除单击侦听器?@RaviSankarRao您只需调用document.removeEventListener('click',handler)
当您想再次启用单击时:)禁用使用此答案进行单击,但无法对其进行升级:)“单击”
window.addEventListener("click", (e) => {
e.stopPropagation();
e.stopImmediatePropagation();
e.preventDefault();
}, true)
document.addEventListener("click",handler,true);
function handler(e){
e.stopPropagation();
e.preventDefault();
return false;
}