当前,当页面回发或发生其他事情时,我会在整个页面的顶部显示一个大的灰色 div,这样用户就不能多次单击同一个按钮。这在 99% 的情况下都可以正常工作,另外 1% 是在某些移动设备上,用户可以在其中滚动/缩放远离 div。
我没有尝试完善 CSS 以使其正常工作(这将是与新设备的一场持续战斗),我决定阻止用户单击任何内容。类似的东西$('a').click(function(e){e.preventDefault();});
会阻止人们点击锚标签并导航到链接,但它不会阻止链接中的 onclick 事件触发。
我想尽量避免过于彻底地更改页面(例如删除每个 onclick 属性),因为最终必须将页面更改回其原始状态。我想做的是在执行 onclick 事件之前拦截点击,但我认为这是不可能的。相反,我所做的是在鼠标按下时隐藏单击的元素并在文档的 mouseup 上显示它,这会停止单击事件触发,但看起来不太好。谁能想到更好的解决方案?如果不是,那么这将适用于每个设备/浏览器吗?
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:http: //jsfiddle.net/d4wzK/2/