Una vez me he despedido de un evt.preventDefault(), ¿cómo puedo continuar con las acciones por defecto de nuevo?

  • Creo que por lo general su función de ejecutar y, a continuación, el comportamiento predeterminado iba a funcionar, por lo que nunca llamaría evt.preventDefault() en el primer lugar
  • Nos puedes dar un ejemplo de lo que estamos tratando de hacer?
  • Posibles duplicados? : stackoverflow.com/questions/1551389/…
  • Has mirado en esta pregunta & respuesta? stackoverflow.com/questions/1164132/…
  • Yo no estoy tan seguro… que uno es específico para jQuery.
  • Wow, gracias por la rápida respuesta! Mi problema es, sin embargo, que no soy la cocción de la evt.preventDefault();. Estoy corriendo una 3 ª parte aplicaciones de flash en una caja de luz. Cuando cierro la caja de luz, de alguna manera mi rueda de desplazamiento de la página se detiene. Haciendo un poco de investigación, me encontré con que esta aplicación flash desactiva el desplazamiento de la página, porque de una función de zoom. Así que ahora estoy tratando de reanudar la página de desplazamiento una vez que la aplicación está cerrada. Tal vez hay algún método que pueda llamar para reanudar la rueda del ratón evento?
  • posibles duplicados de Cómo volver a activar evento.preventDefault?
  • Así que mirando en ese enlace, cómo podría reanudar el desplazamiento? $(document).unbind('sroll').scroll()? No muy seguro de en que uno.
  • posibles duplicados de cómo volver a habilitar por defecto después de hacer caso.preventDefault() y Cómo volver a activar evento.preventDefault?
  • Esta es una preocupación válida, ¿cómo volver a habilitar el defecto dado que esto puede tener surgió de la catedral de otro código?
  • Probar la solución que aquí se mencionan. introduzca el enlace de la descripción aquí

InformationsquelleAutor Bryan | 2011-04-13

17 Comentarios

  1. 84

    Según comentó por @Prescott, el opuesto de:

    evt.preventDefault();

    Podría ser:

    Esencialmente, lo que equivale a ¿’default’, desde que ya no estamos prevención.

    Lo contrario, me siento inclinado a punto a las respuestas proporcionadas por otro de los comentarios y respuestas:

    Cómo desenlazar un oyente que llama evento.preventDefault() (usando jQuery)?

    Cómo volver a activar evento.preventDefault?

    Tenga en cuenta que el segundo ha sido aceptado con una solución de ejemplo, dado por redsquare (publicado aquí para obtener una solución directa en caso de que esto no se cierra como duplicado):

    $('form').submit( function(ev) {
         ev.preventDefault();
         //later you decide you want to submit
         $(this).unbind('submit').submit()
    });
    • Este solucionado mi problema perfectamente. Gracias por brindar ese fragmento!
    • Gracias! Estaba rascando mi cabeza por un tiempo en esto (yo necesitaba parar y comprobar un par de cosas antes de presentar un formulario, no se presenta en ciertas circunstancias, la presentación en los demás).
    • Se hace el trabajo, pero no entiendo por qué la siguiente forma de presentar llamar a la función de nuevo, pensé que iba a separar definitivamente, pero parece que desenlazar sólo para la llamada actual… no lo puedo explicar, que hace exactamente lo que quiero pero no es lo que yo hubiera esperado.
    • una inteligente y rápida solución. Me encanta 🙂
    • Funcionó perfecto aquí. Gracias!
  2. 51
    function(evt) {evt.preventDefault();}

    y su opuesto

    function(evt) {return true;}

    saludos!

    • Esto funcionó para mí, pero me pregunto si alguien puede explicar un poco mejor en cuanto a ¿por qué?
    • Esto no deshacer preventDefault(), de hecho hace lo mismo como si a usted le ommit la return true: nada.
    • ahora ya no funciona. !!!
  3. 15

    Para procesar un comando antes de seguir un enlace de un click evento en jQuery:

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

    Prevenir y siga a través con 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");
        }
    });

    O simplemente ejecutar window.location = this.href; después de la preventDefault();

    • A la derecha, pero se supone que el preventDefault es un enlace, y no dicen evento «touchmove» en el cuerpo del documento.
    • Esto no es lo que pregunta.
  4. 7

    OK ! funciona para el evento 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 !
    
    });
  5. 6

    Tuve que retrasar el envío de un formulario en jQuery en el fin de ejecutar una llamada asincrónica. Aquí está el código simplificado…

    $("$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();
        });
    });
    • Otra opción en este escenario podría ser la utilización de input type=»button» y se unen al evento click en lugar de utilizar input type=»submit» y vinculante para el evento de envío.
  6. 4

    Sugiero el siguiente patrón:

    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>

    …a menos que me estoy perdiendo algo.

    http://jsfiddle.net/DdvcX/

  7. 4

    No hay opuesto método de event.preventDefault() de entender por qué usted primero tiene que mirar en lo que event.preventDefault() hace cuando usted llame.

    Debajo de la capucha, la funcionalidad para preventDefault es esencialmente llamar a un return false que detiene cualquier futura ejecución. Si usted está familiarizado con las viejas formas de Javascript, fue una vez en la moda de usar return false para la cancelación de eventos en cosas como el formulario envía los botones y el uso de devolver verdadero (antes de jQuery incluso fue alrededor).

    Como usted probablemente ya han trabajado sobre la base de la simple explicación arriba: el opuesto de event.preventDefault() no es nada. Usted simplemente no impedir el caso de que, por defecto el navegador permitirá que el evento si no a su prevención.

    Ver más abajo para una explicación:

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

    En el código anterior se dará cuenta de que están comprobando si allowSubmit es falso. Esto significa que vamos a evitar que nuestra forma de presentar el uso de event.preventDefault y, a continuación, vamos a hacer algunas lógica de validación y si somos felices, establecer allowSubmit a la verdad.

    Este es realmente el único método eficaz de hacer lo contrario de event.preventDefault() – usted también puede intentar la extracción de eventos así que básicamente sería lograr la misma cosa.

  8. 4

    Aquí algo útil…

    Primero de todo vamos a hacer clic en el enlace , ejecutar algún código, y que vamos a realizar la acción predeterminada. Esto será posible mediante el uso de evento.currentTarget echar un vistazo. Aquí vamos a tratar de acceder a Google en una nueva pestaña, pero antes tenemos que ejecutar algún código.

    <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>
  9. 2

    Esto es lo que he utilizado para ello:

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

    Y deshacerla:

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

    Yo a suponer el «contrario» sería para simular un evento. Usted podría utilizar .createEvent()

    Siguientes Mozilla ejemplo:

    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: documento.createEvent


    jQuery ha .trigger() así que usted puede desencadenar eventos en elementos — a veces útil.

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

    jquery en() podría ser otra solución para esto. escpacially cuando se trata del uso de los espacios de nombres.

    jquery en() es sólo la forma actual de los eventos de unión ( en lugar de bind() ). off() es para separar estos. y cuando se utiliza un espacio de nombres, puede agregar y quitar varios eventos diferentes.

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

    ahora con el uso de espacio de nombres, puede agregar varios de estos eventos y es capaz de eliminar aquellos que, en función de sus necesidades.. mientras presentar podría no ser el mejor ejemplo, esto puede ser práctico en un clic o pulsación de tecla o lo que sea..

  12. 0

    puede utilizar esta después de «preventDefault» método

    //Aquí evt.objetivo de retorno de eventos predeterminado (por ejemplo : defult url etc)

    var defaultEvent=evt.target;

    //Aquí se guarda por defecto evento ..

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

    Usted puede utilizar siempre este conectado a algún evento click en el script:

    location.href = this.href;

    ejemplo de uso es:

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

    Ninguna de las soluciones me ayudó aquí y hice esto para resolver mi situación.

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

    Y la función 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();
    }
  15. -1

    He usado el siguiente código. Funciona muy bien para mí.

    $('a').bind('click', function(e) {
      e.stopPropagation();
    });
    • Como se explica en la documentación de la API de jQuery, esto evita que el evento de que burbujea el árbol DOM, la prevención de cualquier padre controladores a partir de la notificación del evento. Que no es lo mismo que/o el opuesto de event.preventDefault();
    • Esto no es lo que la pregunta que se hace cualquiera.
  16. -1

    este código funcionó para mí para volver a ejecutar el evento después de que yo había usado :

    event.preventDefault(); to disable the event.
    
    
    event.preventDefault = false;

Dejar respuesta

Please enter your comment!
Please enter your name here