[javascript] 如何解除调用event.preventDefault()(使用jQuery)的侦听器?


Answers

它相当简单

让我们假设你做了类似的事情

document.ontouchmove = function(e){ e.preventDefault(); }

现在要恢复到原来的状况,请执行以下操作...

document.ontouchmove = function(e){ return true; }

从这个website

Question

jquery默认切换调用preventDefault(),所以默认值不起作用。 你不能点击复选框,你不能点击链接等

是否有可能恢复默认处理程序?




通过使用名称空间来完成此操作的最佳方式。 这是一种安全可靠的方式。 这里.rb是确保解除绑定函数在特定keydown上工作但不在其他人上的命名空间。

$(document).bind('keydown.rb','Ctrl+r',function(e){
            e.stopImmediatePropagation();
            return false;
        });

$(document).unbind('keydown.rb');

ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/ : http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/

ref2: http://jqfundamentals.com/chapter/events : http://jqfundamentals.com/chapter/events




禁用:

document.ontouchstart = function(e){ e.preventDefault(); }

启用:

document.ontouchstart = function(e){ return true; }



您可以通过执行以下操作来恢复默认操作(如果是HREF后续操作):

window.location = $(this).attr('href');




$('#my_elementtt').click(function(event){
    trigger('click');
});



function DoPrevent(e) {
  e.preventDefault();
  e.stopPropagation();
}

// Bind:
$(element).on('click', DoPrevent);

// UnBind:
$(element).off('click', DoPrevent);



使用布尔值:

let prevent_touch = true;
document.documentElement.addEventListener('touchmove', touchMove, false);
function touchMove(event) { 
    if (prevent_touch) event.preventDefault(); 
}

我在Progressive Web App中使用它来防止在某些“页面”上滚动/缩放,同时允许在其他页面上进行滚动/缩放。




Related