javascript - form - ¿Cómo desvincular un oyente que está llamando a event.preventDefault()(usando jQuery)?
preventdefault angular 4 (15)
jquery alternar llamadas preventDefault () de forma predeterminada, por lo que los valores predeterminados no funcionan. no puede hacer clic en una casilla, no puede hacer clic en un enlace, etc.
¿es posible restablecer el controlador predeterminado?
En mi caso:
$(''#some_link'').click(function(event){
event.preventDefault();
});
$(''#some_link'').unbind(''click'');
funcionó como el único método para restablecer la acción predeterminada.
Como se ve aquí: https://.com/a/1673570/211514
Es bastante simple
Supongamos que haces algo como
document.ontouchmove = function(e){ e.preventDefault(); }
ahora para revertirlo a la situación original, haz lo siguiente ...
document.ontouchmove = function(e){ return true; }
De este website
Inhabilitar:
document.ontouchstart = function(e){ e.preventDefault(); }
Habilitar:
document.ontouchstart = function(e){ return true; }
La mejor forma de hacerlo es usar el espacio de nombres. Es una forma segura y segura. Aquí .rb es el espacio de nombres que asegura que la función de desvinculación funciona en esa clave en particular pero no en otras.
$(document).bind(''keydown.rb'',''Ctrl+r'',function(e){
e.stopImmediatePropagation();
return false;
});
$(document).unbind(''keydown.rb'');
ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
No es posible restaurar un preventDefault()
pero lo que puedes hacer es engañarlo :)
<div id="t1">Toggle</div>
<script type="javascript">
$(''#t1'').click(function (e){
if($(this).hasClass(''prevented'')){
e.preventDefault();
$(this).removeClass(''prevented'');
}else{
$(this).addClass(''prevented'');
}
});
</script>
Si quieres dar un paso más, incluso puedes usar el botón disparador para activar un evento.
No estoy seguro de que seas lo que quieres decir: pero aquí hay una solución para un problema similar (y posiblemente el mismo) ...
A menudo utilizo preventDefault () para interceptar elementos. Sin embargo, no es el único método de interceptación ... a menudo es posible que desee una "pregunta" sobre qué comportamiento continúa como antes o si 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 el incumplimiento" tiene la intención de interceptar y hacer algo más: el "confirmar" está diseñado para usarse en ... ¡bien - confirmando!
Puede configurar para formar 2 clases. Después de configurar su secuencia de comandos JS a uno de ellos, cuando desee deshabilitar su secuencia de comandos, simplemente elimine la clase con secuencia de comandos enlazada de este formulario.
HTML:
<form class="form-create-container form-create"> </form>
JS
$(document).on(''submit'', ''.form-create'', function(){
..... ..... .....
$(''.form-create-container'').removeClass(''form-create'').submit();
});
Puede restaurar la acción predeterminada (si es un HREF a continuación) al hacer esto:
window.location = $(this).attr(''href'');
Tuve un problema en el que necesitaba la acción predeterminada solo después de haber finalizado alguna acción personalizada (habilitar campos de entrada deshabilitados en un formulario). Envolví la acción predeterminada (submit ()) en una función recursiva propia (dosubmit ()).
var prevdef=true;
var dosubmit=function(){
if(prevdef==true){
//here we can do something else first//
prevdef=false;
dosubmit();
}
else{
$(this).submit();//which was the default action
}
};
$(''input#somebutton'').click(function(){dosubmit()});
Use un booleano
let prevent_touch = true;
document.documentElement.addEventListener(''touchmove'', touchMove, false);
function touchMove(event) {
if (prevent_touch) event.preventDefault();
}
Utilizo esto en una aplicación web progresiva para evitar el desplazamiento / acercamiento de algunas ''páginas'' y permitir otras.
en algunos casos * inicialmente puede return false
lugar de e.preventDefault()
, luego cuando desea restaurar el valor predeterminado para return true
.
* Significado cuando no le molesta el burbujeo del evento y no usa e.stopPropagation()
junto con e.preventDefault()
También vea una pregunta similar (también en )
o en el caso de la casilla de verificación puede tener algo como:
$(element).toggle(function(){
$(":checkbox").attr(''disabled'', true);
},
function(){
$(":checkbox").removeAttr(''disabled'');
})
si es un enlace, entonces $(this).unbind("click");
Volvería a habilitar el enlace haciendo clic y se restablecería el comportamiento predeterminado.
Creé un juego de demostración JS para demostrar cómo funciona esto:
Aquí está el código del violín de JS:
HTML:
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<a href="http://jquery.com">Default click action is prevented, only on the third click it would be enabled</a>
<div id="log"></div>
Javascript:
<script>
var counter = 1;
$(document).ready(function(){
$( "a" ).click(function( event ) {
event.preventDefault();
$( "<div>" )
.append( "default " + event.type + " prevented "+counter )
.appendTo( "#log" );
if(counter == 2)
{
$( "<div>" )
.append( "now enable click" )
.appendTo( "#log" );
$(this).unbind("click");//-----this code unbinds the e.preventDefault() and restores the link clicking behavior
}
else
{
$( "<div>" )
.append( "still disabled" )
.appendTo( "#log" );
}
counter++;
});
});
</script>
$(''#my_elementtt'').click(function(event){
trigger(''click'');
});
function DoPrevent(e) {
e.preventDefault();
e.stopPropagation();
}
// Bind:
$(element).on(''click'', DoPrevent);
// UnBind:
$(element).off(''click'', DoPrevent);