Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在Div中禁用鼠标和按键事件_Jquery_Html - Fatal编程技术网

Jquery 在Div中禁用鼠标和按键事件

Jquery 在Div中禁用鼠标和按键事件,jquery,html,Jquery,Html,我在div中有多个Html元素。是否有任何方法可以禁用该Div的鼠标和按键事件(而不是单个元素)?图元是自动生成的,位于多个跨度内。因此,我只想禁用整个div,这样除了readonly使用.unbind()之类的工具外,什么都不能更改 $('#my_div_id').unbind(); 它将删除将附加到该div的所有事件。请参见此 你可以用。死也一样 $('#my_div_id').die(); 我相信您可以在执行event.stopImmediatePropagation()的元素上绑定一

我在
div
中有多个
Html
元素。是否有任何方法可以禁用该Div的鼠标和按键事件(而不是单个元素)?图元是自动生成的,位于多个跨度内。因此,我只想禁用整个div,这样除了
readonly

使用.unbind()之类的工具外,什么都不能更改

$('#my_div_id').unbind();
它将删除将附加到该div的所有事件。请参见此

你可以用。死也一样

$('#my_div_id').die();

我相信您可以在执行
event.stopImmediatePropagation()的元素上绑定一个处理程序

只要此事件先触发,其他所有事件都不会触发

不幸的是,手动定义事件优先级是非常困难的。 您必须确保事件是在堆栈中的最后一个定义的。

您可以使用jquery函数来实现这一点

$('#foo').unbind();
或者,如果要禁用特定事件,您可以使用它,如:

 $('#foo').unbind('click');

另外,您还可以查看jquery的事件名称空间。我认为这可能会对您有用。

根据jQuery文档,unbind方法从元素中删除以前附加的事件处理程序。我的理解是,您只想防止触发默认浏览器事件,而不是删除以前附加的事件

有一个简单的CSS解决方案,在IE10及以下版本上不起作用:

#yourDiv {pointer-events:none;}
使用jQuery的解决方案是向div中添加一个事件,然后防止在您选择的事件上发生默认行为:

$('#yourDiv').click(function(e){
    e.preventDefault();    
});
单击事件也适用于通过键盘访问复选框和单选按钮,但如果需要(例如)防止在输入字段上键入文本,只需将键盘事件添加到列表中:

$('#yourDiv').click(function(e){
    e.preventDefault();    
});
$('#yourDiv').keypress(function(e){
    e.preventDefault();
});

我只是发布这个答案,因为它可能会帮助其他人寻找类似的功能,但我相信有更好的方法在你的情况下这样做。您可以运行一个函数,将元素设置为disabled
$(“#yourDiv input”).prop(“disabled”,true)加载后。如果不知道你的html,很难说清楚。

这是另一个老把戏

为了避免鼠标接触到您的div,请将另一个大小相同的div放置在其顶部(z-index),不透明度为0(或)

通过将“显示”特性从“无”(默认值)更改为“块”,可以触发它。 当div的显示设置为block时,它将位于常规div的顶部,并在鼠标和div之间形成一堵墙


它可能不适合您的特定页面和css架构,但如果适合,则易于设置。:)

我用它来完全禁用所有窗口的单击。 是一个具有高z索引的透明覆盖面板,使用它您无法在任何地方单击

var $ventanaModal = $('<div id="pantallaTransparente" class="ip-container containerFondoModal zIndexAlto"></div>');

$('body').prepend($ventanaModal); 

正如我所料:

element.style {
   pointer-events: none;
}

可以通过CSS解决。使用下面的代码

.div-element {
   pointer-events: none; // disable all the pointer events in div
}
.div-element * {
   pointer-events: auto; // enables all the pointer events in children elements of the div
}

@DhavalMarthak正如我上面提到的,元素是自动生成的。我只需要
div的id
就可以了。但是你不能显示你正在生成的元素的原型吗?jquery函数呢?#你的div{pointer events:none;}没有通过IE11Nice catch@JackFairfield工作。我已根据此表更新了答案-这不会禁用键盘事件。如果您想禁用键盘事件,那是因为您已经连接了侦听器。如果在已连接的侦听器之后应用此侦听器,其他侦听器仍将运行,因此这对禁用事件没有任何影响。取消事件的默认操作与禁用事件不同。只是没有。如果您首先附加此侦听器,或者附加的优先级高于所有其他事件,则可以调用stopImmediatePropagation,但preventDefault对于此问题无效。使用
.on(“单击按键”)
应同时阻止键盘和鼠标,并且时间更短。ActionScript 3中存在事件优先级,它将JavaScript一扫而光,并且已经存在了十年。AS3的InteractiveObject.mouseEnabled属性与指针事件类似:无,但实际上禁用了鼠标和键盘上的所有交互事件。2017年无法禁用键盘事件或设置事件优先级是JavaScript的一大失败。无论如何,stopImmediatePropagation是真正防止键盘事件触发的唯一正确答案。它不会禁用按键事件。这不会阻止键盘交互。这不会禁用键盘事件。
.div-element {
   pointer-events: none; // disable all the pointer events in div
}
.div-element * {
   pointer-events: auto; // enables all the pointer events in children elements of the div
}