web-dev-qa-db-fra.com

Quel est le contraire de evt.preventDefault ();

Une fois que j'ai tiré une evt.preventDefault(), comment puis-je reprendre les actions par défaut?

139
Bryan

Selon commenté par @Prescott, le contraire de:

evt.preventDefault();

Pourrait être:

Cela équivaut essentiellement à 'do default', puisque nous ne l'en empêchons plus.

Sinon, je suis enclin à vous indiquer les réponses fournies par d'autres commentaires et réponses:

Comment dissocier un écouteur qui appelle event.preventDefault () (à l'aide de jQuery)?

Comment réactiver event.preventDefault?

Notez que le second a été accepté avec un exemple de solution, donné par redsquare (posté ici pour une solution directe au cas où cela ne serait pas fermé en double):

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

et son contraire

function(evt) {return true;}

à votre santé!

49
foxybagga

Pour traiter une commande avant de continuer un lien depuis un événement click dans jQuery:

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

Prévenez et suivez avec jQuery:

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

Ou exécutez simplement window.location = this.href; après la preventDefault();

14
Bradley Flood

D'ACCORD ! cela fonctionne pour l'événement click:

$("#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

Je devais retarder la soumission d'un formulaire dans jQuery afin d'exécuter un appel asynchrone. Voici le code simplifié ...

$("$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

Je suggérerais le modèle suivant:

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>

... sauf si je manque quelque chose.

http://jsfiddle.net/DdvcX/

4
karim79

Il n'y a pas de méthode inverse de event.preventDefault() pour comprendre pourquoi vous devez d'abord examiner ce que fait event.preventDefault() lorsque vous l'appelez.

Sous le capot, la fonctionnalité de preventDefault appelle essentiellement un retour false qui interrompt toute exécution ultérieure. Si vous connaissez les anciennes méthodes de Javascript, il était une fois de plus la mode d’utiliser return pour annuler des événements tels que la soumission de formulaires et les boutons avec return true (avant même que jQuery soit disponible).

Comme vous avez probablement déjà pu travailler sur la base de l'explication simple ci-dessus: l'opposé de event.preventDefault() n'est rien. Vous n'empêchez pas l'événement, par défaut, le navigateur l'autorisera si vous ne l'en empêchez pas.

Voir ci-dessous pour une explication:

;(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);

Dans le code ci-dessus, vous remarquerez que nous vérifions si allowSubmit est faux. Cela signifie que nous empêcherons notre formulaire de soumettre en utilisant event.preventDefault, puis nous ferons une logique de validation et si nous sommes satisfaits, définissez allowSubmit sur true.

C’est vraiment la seule méthode efficace pour faire l’opposé de event.preventDefault() - vous pouvez également supprimer les événements qui aboutiraient essentiellement au même résultat.

3
Partha

Je suppose que le "contraire" serait de simuler un événement. Vous pouvez utiliser .createEvent()

En suivant l'exemple de Mozilla:

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");
  }
}

Réf: document.createEvent


jQuery a .trigger() afin que vous puissiez déclencher des événements sur des éléments - parfois utile.

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

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

C'est ce que j'avais l'habitude de faire:

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

Et pour le défaire:

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

et son contraire (standard):

event.returnValue = true;

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

2
user10625817

jquery on () pourrait être une autre solution à cela. en ce qui concerne l'utilisation de namespaces .

jquery on () est simplement le moyen actuel de lier des événements (au lieu de bind ()). off () est de les dissocier. et lorsque vous utilisez un espace de noms, vous pouvez ajouter et supprimer plusieurs événements différents.

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

maintenant, avec l’utilisation d’espaces de noms, vous pouvez ajouter plusieurs de ces événements et les supprimer, en fonction de vos besoins. Bien que l’envoi ne soit peut-être pas le meilleur exemple, il pourrait être utile lors d’un clic, d’une pression sur une touche ou autre.

1
honk31

Voici quelque chose d'utile ...

Tout d'abord, nous allons cliquer sur le lien, exécuter du code et exécuter l'action par défaut. Ce sera possible en utilisant event.currentTarget Jetez un coup d'oeil. Ici, nous allons essayer d’accéder à Google sur un nouvel onglet, mais auparavant, nous devons exécuter du code.

<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

vous pouvez l'utiliser après la méthode "preventDefault"

// Evt.target renvoie ici l'événement par défaut

var defaultEvent=evt.target;

// Ici nous sauvegardons l'événement par défaut ..

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

Aucune des solutions ne m'a aidé ici et j'ai fait cela pour résoudre ma situation.

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

Et la fonction 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

Vous pouvez toujours utiliser cette pièce jointe à un événement de clic dans votre script:

location.href = this.href;

exemple d'utilisation:

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