Quel est le contraire de evt.preventDefault();

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

126
demandé sur Black 2011-04-13 19:42:20

15 réponses

comme le commente @Prescott, le contraire de:

evt.preventDefault();

pourrait être:

correspond essentiellement à " do default " , puisque nous ne l'empêchons plus.

sinon je suis enclin à vous montrer les réponses fournies par d'autres commentaires et réponses:

comment débiter un auditeur qui est l'appel de l'événement.preventDefault () (utilisant jQuery)?

Comment réactiver l'événement.préventdefault?

notez que la seconde solution a été acceptée avec un exemple de solution, donné par redsquare (posté ici pour une solution directe au cas où ce n'est pas fermé en double):

$('form').submit( function(ev) {
     ev.preventDefault();
     //later you decide you want to submit
     $(this).unbind('submit').submit()
});
65
répondu Grant Thomas 2017-05-23 12:34:36
function(evt) {evt.preventDefault();}

et son opposé

function(evt) {return true;}

santé!

48
répondu foxybagga 2018-01-16 09:01:51

pour traiter une commande avant de poursuivre un lien à partir d'un click événement dans jQuery:

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

prévenir et poursuivre 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 tout simplement exécuter window.location = this.href; après le preventDefault();

15
répondu Bradley Flood 2014-06-20 02:45:17

j'ai dû retarder une soumission de 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();
    });
});
5
répondu Bobby Pearson 2013-04-05 04:46:56

OK ! il fonctionne pour l'événement de clic:

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

});
5
répondu SNS Web 2016-07-28 05:40:03

je suggérerais 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>

...sauf si je suis en manque de quelque chose.

http://jsfiddle.net/DdvcX /

4
répondu karim79 2011-04-13 15:50:33

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

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 canceled = !cb.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}

Ref: document.createEvent


jQuery a .trigger() donc vous pouvez déclencher des événements sur des éléments -- parfois utile.

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

$('#foo').trigger('click');
2
répondu Gary Green 2011-04-13 16:22:52

C'est ce que j'ai utilisé pour le définir:

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

et de le défaire:

$("body").unbind("touchmove");
2
répondu Joe McLean 2018-03-12 20:49:15

jquery () pourrait être une autre solution à cette question. escpacially quand il s'agit de l'utilisation de namespaces .

jquery on () est juste la façon courante de lier les événements (au lieu de bind ()). off() est de les débiter. 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 de namespace, vous pouvez ajouter plusieurs de ces événements et sont possibilité de les enlever, selon vos besoins.. bien que submit puisse ne pas être le meilleur exemple, cela peut s'avérer pratique sur un clic ou une touche ou n'importe quoi d'autre..

1
répondu honk31 2017-07-04 15:38:44

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

sous le capot, la fonctionnalité de preventDefault appelle essentiellement un retour false qui arrête toute exécution ultérieure. Si vous êtes familier avec les anciennes méthodes de Javascript, il était une fois à la mode d'utiliser return false pour annuler des événements sur des choses comme les formulaires soumet et boutons en utilisant return true (avant jQuery a été même autour de vous).

comme vous avez probablement déjà travaillé sur la base de la simple explication ci-dessus: le contraire de event.preventDefault() n'est rien. Vous n'empêchez tout 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 false. Cela signifie que nous allons empêcher notre formulaire de soumettre en utilisant event.preventDefault et puis nous allons faire un peu de logique de validation et si nous sommes heureux, définir allowSubmit à true.

C'est vraiment la seule méthode efficace de faire le contraire de event.preventDefault() – vous pouvez également essayer d'enlever événements qui, essentiellement, permettrait de réaliser la même chose.

1
répondu Partha 2018-06-01 10:39:13

voici quelque chose d'utile...

tout d'abord , nous cliquerons sur le lien, exécuterons du code, puis nous exécuterons l'action par défaut. Cela sera possible en utilisant l'événement .cible actuelle regardez. Ici, nous allons essayer D'accéder à Google sur un nouvel onglet, mais avant que nous avons besoin de lancer un peu de 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
répondu Rafael Xavier 2018-06-14 04:05:54

vous pouvez utiliser cette méthode après "preventDefault

//Ici, evt.target return default event (par exemple : defult url etc)

var defaultEvent=evt.target;

/ / ici nous enregistrons l'événement par défaut ..

if("true")
{
//activate default event..
location.href(defaultEvent);
}
0
répondu user3631514 2014-06-09 07:06:18

vous pouvez toujours utiliser ce attaché à un certain événement de clic dans votre script:

location.href = this.href;

exemple d'utilisation:

jQuery('a').click(function(e) {
    location.href = this.href;
});
0
répondu kkatusic 2017-12-05 18:17:16

ce code m'a permis de Ré-instancier l'événement après que j'ai utilisé:

event.preventDefault(); to disable the event.


event.preventDefault = false;
0
répondu LCMr_music 2017-12-12 07:12:28

j'ai utilisé le code suivant. Il fonctionne très bien pour moi.

$('a').bind('click', function(e) {
  e.stopPropagation();
});
-1
répondu VeeraPrasad 2014-07-10 04:48:50