Javascript 如何重新启用event.preventDefault?

Javascript 如何重新启用event.preventDefault?,javascript,jquery,Javascript,Jquery,我有一个网页,我已经阻止了所有提交按钮上的默认操作,但是我想重新启用按钮上的默认提交操作我如何才能做到这一点 我当前正在使用以下命令阻止默认操作: $("form").bind("submit", function(e){ e.preventDefault(); }); 我已通过以下方式成功完成此操作: $(document).ready(function(){ $("form:not('#press')").bind("submit", function(e){ e.preventDefau

我有一个网页,我已经阻止了所有提交按钮上的默认操作,但是我想重新启用按钮上的默认提交操作我如何才能做到这一点

我当前正在使用以下命令阻止默认操作:

$("form").bind("submit", function(e){
e.preventDefault();
});
我已通过以下方式成功完成此操作:

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

但是我可以在单击按钮时动态执行此操作吗?

您必须解除绑定事件,或者重新绑定到不阻止默认的单独事件,或者在解除绑定后自己在方法中调用默认事件。 没有魔法事件。取消=错误

应要求

 $('form').submit( function(ev){

         ev.preventDefault();

         //later you decide you want to submit
         $(this).unbind('submit').submit()

  });

要么按照redsquare的建议使用此代码:

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;
$('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);
}
与此相反

function(e){ return true; }

干杯

您可以通过添加

this.delegateEvents();  // Re-activates the events for all the buttons
如果将其添加到主干js视图的呈现函数中,则可以根据需要使用event.preventDefault()。

通过异步操作(计时器、ajax),可以覆盖属性
isDefaultPrevented
,如下所示:

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;
$('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);
}

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

我最近遇到了类似的问题。我有一个表单和PHP函数,一旦表单提交就可以运行。但是,我需要先运行javascript

        // This variable is used in order to determine if we already did our js fun
        var window.alreadyClicked = "NO"
        $("form:not('#press')").bind("submit", function(e){
            // Check if we already run js part
            if(window.alreadyClicked == "NO"){
                // Prevent page refresh
                e.preventDefault();
                // Change variable value so next time we submit the form the js wont run
                window.alreadyClicked = "YES"
                // Here is your actual js you need to run before doing the php part
                xxxxxxxxxx

                // Submit the form again but since we changed the value of our variable js wont be run and page can reload (and php can do whatever you told it to)
                $("form:not('#press')").submit()
            } 
        });

谢谢你的回答,你能给我一个例子说明怎么做吗?最好的方法之一就是在需要的时候根据条件调用preventDefault()。虽然这是实现您所描述的目标的唯一真正方法,但我鼓励您验证这是解决您的问题的最佳方法。:)谢谢你。我在它的基础上做了一些类似的事情来让谷歌分析工作。漂亮、优雅的解决方案。非常感谢@Swivelgames可以,但我的意思是,如果(someLongRunningOperation()){e.preventDefault();}肯定会因为这个原因失败;在写评论之前不久,我自己调试了这个问题。一个简单的解决方案!这解决了我打开/关闭弹性体滚动的iOS默认行为并保持某些元素可滚动的问题。酷!一个问题是,如果你想做的任何事情花费的时间太长(例如,进行一个Ajax调用),那么如果你把它放在conditional.typo
ev
vs
e
$(this)。触发器('submit')
之后,你可能永远不会到达“return false”或“e.preventDefault()”。这里的触发器('submit')将运行到相同的
e.preventdault()
。这是个糟糕的回答。@i--谢谢!我把它修好了,它可能是