2009-07-22 11 views
56

Ich habe eine Webseite, die ich die Standardaktion auf alle Senden-Schaltflächen verhindert habe, aber ich möchte Standard-Senden Aktion auf einer Schaltfläche wieder aktivieren, wie kann ich das tun?Wie man event.preventDefault wieder aktivieren kann?

ich derzeit verhindern, dass die Standard-Aktion die folgende Verwendung:

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

Ich habe dies erfolgreich getan folgendes mit:

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

Aber kann ich das dynamisch, wenn die Schaltfläche geklickt wird?

+0

Mögliche Duplikate von [wie Standard nach event.preventDefault() zu aktivieren?] (Http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault) –

Antwort

104

Sie müssten das Ereignis lösen und entweder an ein separates Ereignis binden, das nichtDefault verhindert, oder das Standardereignis später in der Methode nach der Aufhebung selbst aufrufen. Es gibt kein magisches event.cancelled = false;

Wie gewünscht

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

     ev.preventDefault(); 

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

    }); 
+0

Danke für Ihre Antwort, könntest du mir ein Beispiel geben, wie das geht. – Richbits

+0

Danke, dachte, dass ich das versucht hatte, aber offensichtlich nicht. – Richbits

+3

Eines der besten Dinge zu tun ist einfach preventDefault() aufrufen, wenn Sie benötigen, basierend auf Bedingungen. Während dies der einzige Weg ist, genau das zu erreichen, was Sie beschrieben haben, ermutige ich Sie zu überprüfen, dass dies die beste Lösung für Ihr Problem ist. :) – Swivel

12

Entweder man tun, was redsquare mit diesem Code schlägt:

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

// later, now switching back 
$("form#foo").unbind("submit", preventDefault); 

Oder Sie vergeben ein Formular Attribut, wenn Vorlage erlaubt ist. Etwas wie folgt aus:

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; 
+0

Awewsome einfache Lösung! Dies löste mein Problem, das iOS-Standardverhalten für elastisches Body-Scrolling ein- und auszuschalten und einige Elemente scrollbar zu halten. Cool! – Garavani

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

    e.preventDefault(); 

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

Tippfehler 'ev' vs' e' und '$ (this) .trigger ('submit')' hier wird in demselben 'e.preventDefault()' laufen. Das ist eine schlechte Antwort. –

+0

@ i-- Danke! Ich habe es behoben, es war ein Tippfehler – adardesign

1
function(e){ e.preventDefault(); 

und sein Gegenteil

function(e){ return true; } 

Prost!

+0

Ein Problem, das ist, dass, wenn alles, was Sie tun möchten, zu lange dauert (z. B. einen Ajax-Aufruf) Sie nie "return false" oder "e.preventDefault()" erreichen, wenn Sie setze es nach dem Konditional. – Casey

-3

Sie können die Aktionen wieder aktivieren, indem

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

Hinzufügen Wenn Sie es auf die Render-Funktion eines Backbone.js Ansicht hinzuzufügen, verwenden Sie können dann Event.preventDefault() nach Bedarf.

0

Mit asynchronen Aktionen (Timer, Ajax) Sie die Eigenschaft isDefaultPrevented wie dies außer Kraft setzen können:

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

Dies ist vollständigste Weg von Retriggerung der Veranstaltung mit den genau gleichen Daten.

Verwandte Themen