2009-07-22 100 views
56

我有一個網頁,我已經阻止了所有提交按鈕的默認操作,但是我想重新啓用按鈕上的默認提交操作,我該怎麼做?如何重新啓用event.preventDefault?

我目前防止默認操作使用下列內容:

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

我已經成功地做到了這一點使用下列內容:

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

但我能做到這一點動態按鈕被按下時?

+0

可能重複[如何啓用默認event.preventDefault()?](http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault) – 2016-06-30 20:23:30

回答

104

您必須解除綁定該事件,並重新綁定到不阻止默認事件的單獨事件,或者在解除綁定後稍後在方法中自行調用默認事件。 沒有神奇的事件。

按照要求

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

     ev.preventDefault(); 

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

    }); 
+0

感謝您的回答,你能否給我一個如何去做的例子。 – Richbits 2009-07-22 09:59:58

+0

謝謝,以爲我曾嘗試過,但顯然不是。 – Richbits 2009-07-22 10:21:06

+3

要做的最好的事情之一就是在需要時根據條件調用preventDefault()。雖然這是實現您所描述的內容的唯一真正方法,但我鼓勵您驗證這是解決您的問題的最佳解決方案。 :) – Swivel 2012-11-15 21:33:59

12

要麼你做這個代碼提出什麼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; 
1
$('form').submit(function(e){ 

    e.preventDefault(); 

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

和與其相對

function(e){ return true; } 

喝彩!

-3

您可以通過添加

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

如果你將它添加到骨幹JS視圖的渲染功能重新激活操作,然後就可以使用所需的event.preventDefault()。

0

隨着異步操作(定時器,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); 
} 

這是完全相同的數據重新觸發事件的最完整的方式。