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