如何重新启用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()。