如何重新启用event.preventDefault?

我有一个网页,我已经阻止所有提交button的默认操作,但是我想重新启用默认提交button上的操作,我该怎么做?

我目前正在使用以下防止默认操作:

$("form").bind("submit", function(e){ e.preventDefault(); }); 

我已经成功地完成了这个使用以下内容:

 $(document).ready(function(){ $("form:not('#press')").bind("submit", function(e){ e.preventDefault(); }); 

但是,当button被点击时,我可以dynamic地做到这一点吗?

您必须解除绑定事件,并重新绑定到不阻止默认事件的单独事件,或者在解除绑定后稍后在方法中自行调用默认事件。 没有神奇的事件。

按照要求

  $('form').submit( function(ev){ ev.preventDefault(); //later you decide you want to submit $(this).unbind('submit').submit() }); 

要么你做这个代码红色方块build议:

 function preventDefault(e) { e.preventDefault(); } $("form").bind("submit", preventDefault); // later, now switching back $("form#foo").unbind("submit", preventDefault); 

或者,只要允许提交,就可以指定一个表单属性。 像这样的东西:

 function preventDefault(e) { if (event.currentTarget.allowDefault) { return; } e.preventDefault(); } $("form").bind("submit", preventDefault); // later, now allowing submissions on the form $("form#foo").get(0).allowDefault = true; 
 function(e){ e.preventDefault(); 

和它的对面

 function(e){ return true; } 

干杯!

 $('form').submit( function(e){ e.preventDefault(); //later you decide you want to submit $(this).trigger('submit'); or $(this).trigger('anyEvent'); 

使用asynchronous操作(定时器,ajax),您可以覆盖属性isDefaultPrevented如下所示:

 $('a').click(function(evt){ e.preventDefault(); // in async handler (ajax/timer) do these actions: setTimeout(function(){ // override prevented flag to prevent jquery from discarding event evt.isDefaultPrevented = function(){ return false; } // retrigger with the exactly same event data $(this).trigger(evt); }, 1000); } 

这是用完全相同的数据重新触发事件的最完整的方式。

您可以通过添加重新激活操作

 this.delegateEvents(); // Re-activates the events for all the buttons 

如果将它添加到骨干js视图的渲染函数中,则可以根据需要使用event.preventDefault()。