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

128 javascript jquery events event-bubbling preventdefault

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

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

kla*_*aus 79

就我而言:

$('#some_link').click(function(event){
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

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

如上所示:https://stackoverflow.com/a/1673570/211514

  • 如果此元素具有另一个单击处理程序,则您将解除绑定的所有事件的绑定,不仅阻止了处理程序... (2认同)

fox*_*gga 55

它相当简单

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

document.ontouchmove = function(e){ e.preventDefault(); }
Run Code Online (Sandbox Code Playgroud)

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

document.ontouchmove = function(e){ return true; }
Run Code Online (Sandbox Code Playgroud)

来自这个网站.

  • 您提供的链接已损坏。 (2认同)

Val*_*Val 16

它是不可能恢复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>
Run Code Online (Sandbox Code Playgroud)

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


Ata*_*ara 11

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

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

// UnBind:
$(element).off('click', DoPrevent);
Run Code Online (Sandbox Code Playgroud)


ada*_*ign 9

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

*含义,当你不介意的事件冒泡,你不使用e.stopPropagation()连同e.preventDefault()

也看到类似的问题(也在堆栈溢出)

或者在复选框的情况下,你可以有类似的东西:

$(element).toggle(function(){
  $(":checkbox").attr('disabled', true);
  },
function(){
   $(":checkbox").removeAttr('disabled');
}) 
Run Code Online (Sandbox Code Playgroud)


crm*_*cco 9

您可以通过执行以下操作恢复默认操作(如果它是HREF跟随):

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

  • 想法是正确的,但开箱即用的代码对我不起作用(除非它只是jquery中的语法更改)我使用:window.location = $(this).attr('href'); (2认同)