jquery alterna las llamadas preventDefault () de forma predeterminada, por lo que los valores predeterminados no funcionan. no puede hacer clic en una casilla de verificación, no puede hacer clic en un enlace, etc.
¿Es posible restaurar el controlador predeterminado?
javascript
jquery
events
preventdefault
event-bubbling
Stijn de Witt
fuente
fuente
preventDefault
después de haber sido llamado. Actualmente, esta pregunta es en realidad '¿cómo desvinculo un oyente de eventos con jQuery?'.Respuestas:
En mi caso:
$('#some_link').unbind('click');
funcionó como el único método para restaurar la acción predeterminada.Como se ve aquí: https://stackoverflow.com/a/1673570/211514
fuente
Es bastante simple
Supongamos que haces algo como
ahora para volver a la situación original, haga lo siguiente ...
De este sitio web .
fuente
No es posible restaurar un
preventDefault()
pero lo que puedes hacer es engañarlo :)Si desea ir un paso más allá, incluso puede usar el botón de activación para activar un evento.
fuente
fuente
en algunos casos * puede inicialmente en
return false
lugar dee.preventDefault()
, luego cuando quiera restaurar el valor predeterminadoreturn true
.* Es decir, cuando no te importa que el evento burbujee y no lo uses
e.stopPropagation()
junto cone.preventDefault()
Vea también una pregunta similar (también en el desbordamiento de pila)
o en el caso de la casilla de verificación puede tener algo como:
fuente
Puede restaurar la acción predeterminada (si es un seguimiento HREF) haciendo esto:
window.location = $(this).attr('href');
fuente
si es un enlace,
$(this).unbind("click");
volvería a habilitar el clic del enlace y se restablecería el comportamiento predeterminado.He creado una demostración de JS Fiddle para demostrar cómo funciona esto:
Aquí está el código del violín JS:
HTML:
Javascript:
fuente
Prueba este código, creo que resuelve tu problema:
Referencia
fuente
La mejor manera de hacer esto usando el espacio de nombres. Es una forma segura y protegida. Aquí .rb es el espacio de nombres que garantiza que la función de desvinculación funcione en ese keydown particular pero no en otros.
ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
ref2: http://jqfundamentals.com/chapter/events
fuente
Inhabilitar:
Habilitar:
fuente
El método preventDefault () de la interfaz de eventos le dice al agente de usuario que si el evento no se maneja explícitamente, su acción predeterminada no debe tomarse como lo haría normalmente. El evento continúa propagándose como de costumbre, a menos que uno de sus oyentes de eventos llame a stopPropagation () o stopImmediatePropagation (), cualquiera de los cuales finaliza la propagación a la vez.
Si se llama a preventDefault () durante cualquier etapa del flujo de eventos, se cancela el evento, lo que significa que no se producirá ninguna acción predeterminada que normalmente tome la implementación como resultado del evento.
Puede usar Event.cancelable para verificar si el evento es cancelable. Llamar a preventDefault () para un evento no cancelable no tiene ningún efecto.
fuente
Tuve un problema en el que necesitaba la acción predeterminada solo después de que alguna acción personalizada (habilitar campos de entrada deshabilitados en un formulario) hubiera concluido. Envolví la acción predeterminada (submit ()) en una función propia y recursiva (dosubmit ()).
fuente
if (predef == true)
es más explícito, está agregando 7 caracteres a su código JS sin ningún motivo.if (prevdef)
es igual de legible. Además, ha agregado un controlador de eventos anónimo redundante cuando.click(dosubmit)
hace lo mismo que.click(function(){dosubmit()})
no se pasan parámetros.Use un booleano:
Lo uso en una aplicación web progresiva para evitar desplazarse / hacer zoom en algunas 'páginas' y permitir otras.
fuente
Puede configurar para formar 2 clases. Después de configurar su script JS en uno de ellos, cuando desee deshabilitar su script, simplemente elimine la clase con script enlazado de este formulario.
HTML:
JS
fuente
fuente
No estoy seguro de que sea lo que quiere decir: pero aquí hay una solución para un problema similar (y posiblemente el mismo) ...
A menudo uso preventDefault () para interceptar elementos. Sin embargo: no es el único método de intercepción ... a menudo es posible que solo desee una "pregunta" sobre qué comportamiento continúa como antes o se detiene. En un caso reciente, utilicé la siguiente solución:
$("#content").on('click', '#replace', (function(event){ return confirm('Are you sure you want to do that?') }));
Básicamente, el "prevenir incumplimiento" está destinado a interceptar y hacer otra cosa: el "confirmar" está diseñado para usarse en ... bueno, ¡confirmando!
fuente