如何完全禁用任何鼠标点击

Oma*_*mar 41 javascript jquery onclick mouseevent

在用户点击...."登录"按钮和其他事件后,我制作了一个加载脚本 - 让用户知道他们必须等待(直到ajax回复).

我如何可以禁用任何鼠标点击(右键单击,左键单击,双击,中键单击,X点击),上div id="doc"
我想将该代码添加到loading.js


HTML

<html>
...
<body>
<div id="doc">
   <div id="content">
   ...
   <input type="button" value="Login" id="login" />
   ...
   </div id="content">
</div id="doc">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)



loading.js

function load_bar(x)
{
    if (x==0)
    {
    $(document.body).css( {"cursor": "default"} );
    $("body").css( {"cursor": "default"} );
    $("#loading").css("visibility", "hidden"); //modal window
//  $("#doc").....ENABLE all clicks (left/right/etc)
    }

    else if (x==1)
    {
    $(document.body).css( {"cursor": "wait"} );
    $("body").css( {"cursor": "wait"} );
    $("#loading").css( {"visibility": "visible"} ); //modal window
//  $("#doc").....DISABLE all clicks (left/right/etc)
    }

    else
    {
    return alert("Wrong argument!");
    }
}
Run Code Online (Sandbox Code Playgroud)



jQuery的

$(document).ready(function()
{
//AJAX
$("#login").click(function()
{
    load_bar(1); //DISABLE clicks and show load_bar
    $(":input").attr("disabled", true);


$.post( 
    ...
    function(data)
    {
    ...
    load_bar(0); //ENABLE clicks and hide load_bar
    ...
    } //END: if:else
}); //END:$.post
    ...
}); //END:ajax
}); //END:jQuery
Run Code Online (Sandbox Code Playgroud)

小智 51

您可以在正文或特定div中添加一个简单的css3规则,使用pointer-events: none;属性.

  • @buvi suri - 在IE11上运行良好(2017年2月). (3认同)
  • 这个解决方案很棒,很容易 (2认同)

Ry-*_*Ry- 39

您可以覆盖一个大的,半透明的,可以获得<div>所有点击.只需添加一个新的<div><body>这种风格:

.overlay {
    background-color: rgba(1, 1, 1, 0.7);
    bottom: 0;
    left: 0;
    position: fixed;
    right: 0;
    top: 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @Omar:`background-image:url('loading.jpg'); background-repeat:no-repeat; 背景位置:中心;`将是一种方式.另一种方法是在`.overlay`上添加`text-align:center;`,然后在`.overlay`中添加一个新图像(`#loading`),样式为:margin-top:50%; 位置:相对; 顶部: - (半图像高度)px`. (4认同)

Cha*_* Ma 19

禁用所有鼠标单击

var event = $(document).click(function(e) {
    e.stopPropagation();
    e.preventDefault();
    e.stopImmediatePropagation();
    return false;
});

// disable right click
$(document).bind('contextmenu', function(e) {
    e.stopPropagation();
    e.preventDefault();
    e.stopImmediatePropagation();
    return false;
});
Run Code Online (Sandbox Code Playgroud)

再次启用它:

$(document).unbind('click');
$(document).unbind('contextmenu');
Run Code Online (Sandbox Code Playgroud)

  • 这不会禁用中间点击.此外,在文档级别设置的事件处理程序将被调用_after_事件从实际元素冒泡.(你已经传播到顶部之后调用`stopPropagation()`.)http://jsfiddle.net/WWx9B/ (5认同)

alo*_*ser 8

就像是:

    $('#doc').click(function(e){
       e.preventDefault()
       e.stopImmediatePropagation() //charles ma is right about that, but stopPropagation isn't also needed
});
Run Code Online (Sandbox Code Playgroud)

应该做的工作你也可以绑定更多的鼠标事件与替换: 编辑:添加这个在费用的部分

    $('#doc').bind('click mousedown dblclick',function(e){
       e.preventDefault()
       e.stopImmediatePropagation()
});
Run Code Online (Sandbox Code Playgroud)

这在解冻中:

  $('#doc').unbind();
Run Code Online (Sandbox Code Playgroud)