246 votes

Quel est le contraire de evt.preventDefault() ;

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

3 votes

Je pense que, typiquement, votre fonction s'exécuterait et ensuite le comportement par défaut s'exécuterait, donc vous n'appelleriez jamais evt.preventDefault() en premier lieu.

0 votes

Pouvez-vous nous donner un exemple de ce que vous essayez de faire ?

1 votes

8voto

Bobby Pearson Points 1

J'ai dû 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();
    });
});

0 votes

Une autre option dans ce scénario pourrait être d'utiliser l'entrée de type="button" et de la lier à l'événement click au lieu d'utiliser l'entrée de type="submit" et de la lier à l'événement submit.

6voto

karim79 Points 178055

Je suggère le schéma 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>

...à moins que je ne rate quelque chose.

http://jsfiddle.net/DdvcX/

0 votes

Oui, c'est ce que j'avais l'intention de faire. C'est pourquoi nous n'avons pas de allowDefault()

4voto

Joe McLean Points 63

C'est ce que j'ai utilisé pour le régler :

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

Et pour le défaire :

$("body").unbind("touchmove");

4voto

Partha Points 330

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

Sous le capot, la fonctionnalité de preventDefault consiste essentiellement à appeler un retour false qui arrête toute exécution ultérieure. Si vous êtes familier avec les anciennes méthodes de Javascript, il était autrefois de bon ton d'utiliser return false pour annuler les événements tels que les soumissions de formulaires et les boutons utilisant return true (avant même que jQuery n'existe).

Comme vous l'avez probablement déjà compris sur la base de l'explication simple ci-dessus : le contraire de event.preventDefault() n'est rien. Vous n'empêchez simplement pas l'événement, par défaut le navigateur autorisera l'événement si vous ne l'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 se soumettre à l'aide de la fonction event.preventDefault puis nous ferons un peu de logique de validation et si nous sommes satisfaits, nous mettrons allowSubmit à true.

C'est vraiment la seule méthode efficace pour faire l'opposé de event.preventDefault() - vous pouvez également essayer de supprimer les événements, ce qui revient au même.

4voto

Rafael Xavier Points 380

Voici quelque chose d'utile...

Tout d'abord, nous allons cliquer sur le lien, exécuter un code, puis nous allons effectuer une action par défaut. Ceci sera possible en utilisant cible actuelle de l'événement Regardez. Ici, nous allons essayer d'accéder à Google dans un nouvel onglet, mais avant cela, 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 votes

Il crée une boucle infinie

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X