如何取消绑定正在调用 event.preventDefault()(使用 jQuery)的侦听器?

IT技术 javascript jquery events preventdefault event-bubbling
2021-02-01 23:51:53

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

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

6个回答

就我而言:

$('#some_link').click(function(event){
    event.preventDefault();
});

$('#some_link').unbind('click'); 作为恢复默认操作的唯一方法。

在这里看到:https : //stackoverflow.com/a/1673570/211514

如果此元素有另一个单击处理程序,则取消绑定所有附加的事件,而不仅仅是阻止处理程序...
2021-03-23 23:51:53

它相当简单

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

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

现在要将其恢复到原始状态,请执行以下操作...

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

从这个网站

您提供的链接已损坏。
2021-03-23 23:51:53
此解决方案在 $('#a_link').click(function(e){ e.preventDefault(); }); 后不起作用 使用解绑功能。
2021-04-01 23:51:53

恢复 a 是不可能的,preventDefault()但你可以做的是欺骗它:)

<div id="t1">Toggle</div>
<script type="javascript">
$('#t1').click(function (e){
   if($(this).hasClass('prevented')){
       e.preventDefault();
       $(this).removeClass('prevented');
   }else{
       $(this).addClass('prevented');
   }
});
</script>

如果您想更进一步,您甚至可以使用触发按钮来触发事件。

我很确定它是 - 我最近在一个设计中做到了这一点。起初单击一个按钮,我通过在 touchmove 事件中添加 e.preventDefault 来阻止滚动,然后在动画完成后我返回 true,它就像一个魅力。
2021-04-03 23:51:53
function DoPrevent(e) {
  e.preventDefault();
  e.stopPropagation();
}

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

// UnBind:
$(element).off('click', DoPrevent);
它对我有用的方式是: $(document).off('touchmove'); $(document).on('touchmove', function() { return true;});
2021-04-09 23:51:53

在某些情况下*您最初可以return false代替e.preventDefault(),然后当您想将默认值恢复为return true.

*意思是当你不介意事件冒泡并且你不使用e.stopPropagation()e.preventDefault()

另见类似问题(也在堆栈溢出中)

或者在复选框的情况下,您可以使用以下内容:

$(element).toggle(function(){
  $(":checkbox").attr('disabled', true);
  },
function(){
   $(":checkbox").removeAttr('disabled');
})