如何启用event.preventDefault?

时间:2009-07-22 09:37:31

标签: javascript jquery

我有一个网页,我阻止了对所有提交按钮的默认操作,但是我想在按钮上重新启用默认提交操作我该怎么办?

我目前正在使用以下内容阻止默认操作:

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

我使用以下方法成功完成了此操作:

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

但是,如果单击该按钮,我可以动态执行此操作吗?

7 个答案:

答案 0 :(得分:114)

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

根据要求

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

         ev.preventDefault();

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

  });

答案 1 :(得分:13)

要么使用此代码执行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;

答案 2 :(得分:4)

function(e){ e.preventDefault();

及其相反的

function(e){ return true; }

喝彩!

答案 3 :(得分:1)

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

     e.preventDefault();

     //later you decide you want to submit
     $(this).trigger('submit');     or     $(this).trigger('anyEvent');

答案 4 :(得分:1)

使用异步操作(定时器,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);
}

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

答案 5 :(得分:0)

我最近有一个类似的问题。我有一个表单和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()
            } 
        });

答案 6 :(得分:-3)

您可以通过添加

重新激活操作
this.delegateEvents();  // Re-activates the events for all the buttons

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