wake-up-neo.net

Was ist das Gegenteil von evt.preventDefault ();

Wie kann ich nach dem Auslösen einer evt.preventDefault() die Standardaktionen wieder aufnehmen?

139
Bryan

Wie von @Prescott kommentiert, das Gegenteil von:

evt.preventDefault();

Könnte sein:

Im Wesentlichen gleichbedeutend mit 'do default', da wir es nicht länger verhindern.

Ansonsten neige ich dazu, Sie auf die Antworten anderer Kommentare und Antworten hinzuweisen:

Wie kann ich einen Listener lösen, der event.preventDefault () (mit jQuery) aufruft?

Wie kann ich event.preventDefault wieder aktivieren?

Beachten Sie, dass die zweite Lösung mit einer von redsquare angegebenen Beispiellösung akzeptiert wurde (hier für eine direkte Lösung, falls diese nicht als Duplikat abgeschlossen ist):

$('form').submit( function(ev) {
     ev.preventDefault();
     //later you decide you want to submit
     $(this).unbind('submit').submit()
});
73
Grant Thomas
function(evt) {evt.preventDefault();}

und sein Gegenteil

function(evt) {return true;}

prost!

49
foxybagga

Um einen Befehl zu verarbeiten, setzen Sie einen Link von einem click-Ereignis in jQuery fort:

ZB: <a href="http://google.com/" class="myevent">Click me</a>

Mit jQuery verhindern und folgen:

$('a.myevent').click(function(event) {
    event.preventDefault();

    // Do my commands
    if( myEventThingFirst() )
    {
      // then redirect to original location
      window.location = this.href;
    }
    else
    {
      alert("Couldn't do my thing first");
    }
});

Oder einfach window.location = this.href; nach der preventDefault(); ausführen

14
Bradley Flood

OK ! Es funktioniert für das Click-Event:

$("#submit").click(function(e){ 

   e.preventDefault();

  -> block the click of the sumbit ... do what you want

$("#submit").unbind('click').click(); // the html click submit work now !

});
6
SNS Web

Ich musste eine Formularübergabe in jQuery verzögern, um einen asynchronen Aufruf auszuführen. Hier ist der vereinfachte Code ...

$("$theform").submit(function(e) {
    e.preventDefault();
    var $this = $(this);
    $.ajax('/path/to/script.php',
        {
        type: "POST",
        data: { value: $("#input_control").val() }
    }).done(function(response) {
        $this.unbind('submit').submit();
    });
});
6
Bobby Pearson

Ich würde folgendes Muster vorschlagen:

document.getElementById("foo").onsubmit = function(e) {
    if (document.getElementById("test").value == "test") {
        return true;
    } else {
        e.preventDefault();
    }
}

<form id="foo">
    <input id="test"/>
    <input type="submit"/>
</form>

... es sei denn, mir fehlt etwas.

http://jsfiddle.net/DdvcX/

4
karim79

Es gibt keine entgegengesetzte Methode von event.preventDefault(), um zu verstehen, warum Sie zuerst prüfen müssen, was event.preventDefault() tut, wenn Sie es aufrufen.

Unter der Haube ruft die Funktionalität für Preventefault im Wesentlichen ein return false auf, wodurch die weitere Ausführung angehalten wird. Wenn Sie mit den alten Methoden von Javascript vertraut sind, war es einmal in Mode, return false zu verwenden, um Ereignisse wie Formularübergaben und Schaltflächen mit return true abzubrechen (bevor jQuery überhaupt verwendet wurde).

Wie Sie wahrscheinlich bereits anhand der oben genannten einfachen Erklärung erarbeitet haben: Das Gegenteil von event.preventDefault() ist nichts. Sie verhindern das Ereignis nur, der Browser lässt das Ereignis standardmäßig zu, wenn Sie es nicht verhindern.

Siehe unten für eine Erklärung:

;(function($, window, document, undefined)) {

    $(function() {
        // By default deny the submit
        var allowSubmit = false;

        $("#someform").on("submit", function(event) {

            if (!allowSubmit) {
                event.preventDefault();

                // Your code logic in here (maybe form validation or something)
                // Then you set allowSubmit to true so this code is bypassed

                allowSubmit = true;
            }

        });
    });

})(jQuery, window, document);

Im obigen Code werden Sie feststellen, dass wir prüfen, ob allowSubmit falsch ist. Dies bedeutet, dass wir verhindern, dass unser Formular mit event.preventDefault übermittelt wird. Anschließend werden wir eine Validierungslogik durchführen. Wenn wir zufrieden sind, setzen Sie allowSubmit auf true.

Dies ist wirklich die einzige wirksame Methode, um das Gegenteil von event.preventDefault() zu tun - Sie können auch versuchen, Ereignisse zu entfernen, die im Wesentlichen dasselbe bewirken würden.

3
Partha

Ich denke, das "Gegenteil" wäre, eine Veranstaltung zu simulieren. Sie könnten .createEvent() verwenden.

Dem Beispiel von Mozilla folgen:

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("checkbox"); 
  var cancelled = !cb.dispatchEvent(evt);
  if(cancelled) {
    // A handler called preventDefault
    alert("cancelled");
  } else {
    // None of the handlers called preventDefault
    alert("not cancelled");
  }
}

Ref: document.createEvent


jQuery hat .trigger(), damit Sie Ereignisse auf Elementen auslösen können - manchmal nützlich.

$('#foo').bind('click', function() {
      alert($(this).text());
});

$('#foo').trigger('click');
2
Gary Green

So habe ich es eingestellt:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});

Und um es rückgängig zu machen:

$("body").unbind("touchmove");
2
Joe McLean
event.preventDefault(); //or event.returnValue = false;

und sein Gegenteil (Standard):

event.returnValue = true;

source: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue

2
user10625817

jquery on () könnte eine andere Lösung dafür sein. escpacially, wenn es um die Verwendung von namespaces geht.

jquery on () ist nur die aktuelle Methode zum Binden von Ereignissen (anstelle von bind ()). off () soll diese entbinden. Wenn Sie einen Namespace verwenden, können Sie mehrere verschiedene Ereignisse hinzufügen und entfernen.

$( selector ).on("submit.my-namespace", function( event ) {
    //prevent the event
    event.preventDefault();

    //cache the selector
    var $this = $(this);

    if ( my_condition_is_true ) {
        //when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
        $this.off("submit.my-namespace").trigger("submit");
    }
});

jetzt können Sie mit der Verwendung von Namespace mehrere dieser Ereignisse hinzufügen und diese je nach Ihren Bedürfnissen entfernen. Das Senden ist jedoch möglicherweise nicht das beste Beispiel. Dies kann jedoch beim Klicken oder Tastendruck nützlich sein.

1
honk31

Hier ist etwas Nützliches ...

Zuerst klicken wir auf den Link, führen etwas Code aus und führen dann eine Standardaktion aus. Dies wird mit event.currentTarget möglich sein. Hier werden wir versuchen, über eine neue Registerkarte auf Google zuzugreifen, aber bevor wir Code ausführen müssen.

<a href="https://www.google.com.br" target="_blank" id="link">Google</a>

<script type="text/javascript">
    $(document).ready(function() {
        $("#link").click(function(e) {

            // Prevent default action
            e.preventDefault();

            // Here you'll put your code, what you want to execute before default action
            alert(123); 

            // Prevent infinite loop
            $(this).unbind('click');

            // Execute default action
            e.currentTarget.click();
        });
    });
</script>
1
Rafael Xavier

sie können dies nach der Methode "reflectDefault" verwenden

// Hier gibt evt.target das Standardereignis zurück (z. B. defult url etc)

var defaultEvent=evt.target;

// Hier speichern wir das Standardereignis ..

if("true")
{
//activate default event..
location.href(defaultEvent);
}
0
user3631514

Keine der Lösungen hat mir hier geholfen und ich tat dies, um meine Situation zu lösen.

<a onclick="return clickEvent(event);" href="/contact-us">

Und die Funktion clickEvent()

function clickEvent(event) {
    event.preventDefault();
    // do your thing here

    // remove the onclick event trigger and continue with the event
    event.target.parentElement.onclick = null;
    event.target.parentElement.click();
}
0
Raza

Sie können dies immer in Verbindung mit einem Click-Ereignis in Ihrem Skript verwenden:

location.href = this.href;

anwendungsbeispiel ist:

jQuery('a').click(function(e) {
    location.href = this.href;
});
0
kkatusic