2009-07-22 30 views
56

Tengo una página web que evité la acción predeterminada en todos los botones de envío; sin embargo, me gustaría volver a habilitar la acción de envío predeterminado en un botón, ¿cómo puedo hacer esto?Cómo volver a habilitar event.preventDefault?

Estoy actualmente impiden la acción por defecto utilizando la siguiente:

$("form").bind("submit", function(e){ 
e.preventDefault(); 
}); 

he hecho esto con éxito utilizando la siguiente:

$(document).ready(function(){ 
$("form:not('#press')").bind("submit", function(e){ 
e.preventDefault(); 
}); 

Pero puedo hacer esto de forma dinámica cuando se hace clic en el botón?

+0

Posible duplicado de [cómo habilitar la opción predeterminada después de event.preventDefault()?] (Http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault) –

Respuesta

104

Debería desvincular el evento y volver a enlazar a un evento separado que no impida Default o simplemente llamar al evento predeterminado usted mismo más tarde en el método después de la desvinculación. No hay ningún evento mágico.cancelled = false;

conforme a lo solicitado

$('form').submit(function(ev){ 

     ev.preventDefault(); 

     //later you decide you want to submit 
     $(this).unbind('submit').submit() 

    }); 
+0

Gracias por su respuesta, ¿podría darme un ejemplo de cómo hacerlo? – Richbits

+0

Gracias, pensé que había intentado eso, pero obviamente no. – Richbits

+3

Una de las mejores cosas para hacer es simplemente invocar preventDefault() cuando lo necesite, basado en condicionales. Si bien esta es la única manera real de lograr exactamente lo que describió, le recomiendo que verifique que esta sea la mejor solución para su problema. :) – Swivel

12

O haces lo que redsquare propone con este código:

function preventDefault(e) { 
    e.preventDefault(); 
} 
$("form").bind("submit", preventDefault); 

// later, now switching back 
$("form#foo").unbind("submit", preventDefault); 

O se asigna un atributo de forma cada vez que se permite la presentación. Algo como esto:

function preventDefault(e) { 
    if (event.currentTarget.allowDefault) { 
     return; 
    } 
    e.preventDefault(); 
} 
$("form").bind("submit", preventDefault); 

// later, now allowing submissions on the form 
$("form#foo").get(0).allowDefault = true; 
+0

¡Una solución sencilla y audaz! Esto resolvió mi problema de activar/desactivar el comportamiento predeterminado de iOS para el desplazamiento del cuerpo elástico y mantener algunos elementos desplazables. ¡Guay! – Garavani

1
$('form').submit(function(e){ 

    e.preventDefault(); 

    //later you decide you want to submit 
    $(this).trigger('submit');  or  $(this).trigger('anyEvent'); 
+3

typo 'ev' vs' e' y '$ (this) .trigger ('submit')' aquí se ejecutará en el mismo 'e.preventDefault()'. esta es una mala respuesta. –

+0

@ i-- ¡Gracias! Lo arreglé, era un error tipográfico – adardesign

1
function(e){ e.preventDefault(); 

y su opuesto

function(e){ return true; } 

saludos!

+0

Un problema, que es que si lo que quieres hacer toma demasiado tiempo (por ejemplo, hacer una llamada Ajax) nunca puedes llegar a "return false" o "e.preventDefault()" si ponlo después del condicional. – Casey

-3

puede volver a activar las acciones mediante la adición de

this.delegateEvents(); // Re-activates the events for all the buttons 

Si se agrega a la función de procesamiento de vista de un backbone.js, entonces se puede utilizar event.preventDefault() según sea necesario.

0

con acciones asincrónicos (temporizadores, Ajax) se puede reemplazar la propiedad isDefaultPrevented así:

$('a').click(function(evt){ 
    e.preventDefault(); 

    // in async handler (ajax/timer) do these actions: 
    setTimeout(function(){ 
    // override prevented flag to prevent jquery from discarding event 
    evt.isDefaultPrevented = function(){ return false; } 
    // retrigger with the exactly same event data 
    $(this).trigger(evt); 
    }, 1000); 
} 

Esta es la forma más completa de retriggering el evento con exactamente los mismos datos.

Cuestiones relacionadas