Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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
Javascript 有人能想出更好的方法阻止用户点击任何东西吗?_Javascript_Jquery - Fatal编程技术网

Javascript 有人能想出更好的方法阻止用户点击任何东西吗?

Javascript 有人能想出更好的方法阻止用户点击任何东西吗?,javascript,jquery,Javascript,Jquery,当前,当一个页面正在回帖或其他事情正在进行时,我会在整个页面顶部显示一个大的灰色div,这样用户就不能多次单击同一个按钮。这在99%的情况下都能正常工作,另外1%在某些移动设备上,用户可以滚动/缩放div 我没有试图完善CSS以使其正确工作(这将是一场与新设备的持续战斗),而是决定阻止用户点击任何东西。类似于$('a')。单击(函数(e){e.preventDefault();})将阻止人们单击锚定标记并导航到链接,但不会阻止链接中的onclick事件触发 我希望尽量避免过于彻底地更改页面(比如

当前,当一个页面正在回帖或其他事情正在进行时,我会在整个页面顶部显示一个大的灰色div,这样用户就不能多次单击同一个按钮。这在99%的情况下都能正常工作,另外1%在某些移动设备上,用户可以滚动/缩放div

我没有试图完善CSS以使其正确工作(这将是一场与新设备的持续战斗),而是决定阻止用户点击任何东西。类似于
$('a')。单击(函数(e){e.preventDefault();})
将阻止人们单击锚定标记并导航到链接,但不会阻止链接中的onclick事件触发

我希望尽量避免过于彻底地更改页面(比如删除每个onclick属性),因为页面最终将不得不更改回其原始状态。我想做的是在onclick事件执行之前拦截点击,但我认为这是不可能的。我所做的是在鼠标上隐藏clicked元素,并在文档的mouseup上显示它,这会停止click事件的触发,但看起来不太好。有谁能想出更好的解决办法吗?如果不是,那么这是否适用于每个设备/浏览器

var catchClickHandler = function(){
    var $this = $(this);
    $this.attr('data-orig-display', $this.css('display'));
    $this.css({display:'none'});
};
var resetClickedElems = function(){
    $('[data-orig-display]').each(function(){
        $(this).css({display:$(this).attr('data-orig-display')}).removeAttr('data-orig-display');
    });
};

$('#btn').click(function(){
    $('a,input').on('mousedown',catchClickHandler);
    $(document).on('mouseup', resetClickedElems);
    setTimeout(function(){
        $('a,input').off('mousedown',catchClickHandler);
        $(document).off('mouseup', resetClickedElems);
    }, 5000);
});

JSFiddle:

您可以使用jQuery BlockUI插件

您可以这样做以防止锚定标记的所有操作:

jQuery('#btn').click(function(){
    jQuery('a').each(function() {
        jQuery(this).attr('stopClick', jQuery(this).attr('onclick'))
            .removeAttr('onclick')
            .click(function(e) {
                e.preventDefault();
            });
    });
});
如果以后需要恢复,则将onclick重命名为stopclick,并停止执行href的默认行为

document.addListener('click',function(e){e.preventDefault()})
修改-

完成任务后,您有责任从文档中删除单击事件

乙二醇-


仅供参考,如果我单击“禁用单击”按钮,然后单击文本框10次或更多次,我可以在文本框中键入内容。为什么不禁用该按钮?为什么你要删除页面上的所有点击?这是因为它会在5秒钟后重新启用点击扫描你禁用锚定标记?我通常不希望他们对页面做任何事情,因为onclick事件之后会触发事件
function prevent(e){
    e.preventDefault()
}
//add 
document.addListener('click',prevent)

//remove
document.removeListener('click',prevent)