2011-06-08 13 views
16

Tengo un controlador de eventos onbeforeunload adjunto a la página que se ejecuta cada vez que la página se vuelve a cargar/se redirige.Cancelar onbeforeunload controlador de eventos?

window.onbeforeunload = function() { 
    console.log("do something");} 

No quiero que este script se ejecute durante mis pruebas. Quiero desactivarlo en mi propio entorno de prueba.

¿Hay alguna forma de desvincular este evento onbeforeunload? Estoy usando JavaScript, con jQuery como marco, por lo que una respuesta en jQuery sería buena.

Respuesta

28

En las funciones de Javascript se pueden sobrescribir. Simplemente puede asignarle un nuevo propósito:

window.onbeforeunload = function() { 
    // blank function do nothing 
} 

Esto sobrescribirá completamente la versión existente de window.onbeforeunload.

Nota: ¿Por qué no elimina simplemente la línea de código que establece esta función en primer lugar? O si no puede, tendrá que configurar esta función en blanco después de que se haya definido, solo para asegurarse de que no se invalide nuevamente

+1

Esto funcionó perfectamente dentro de nuestras funciones AJAX que afectan este mismo problema. +1 – Ligemer

+11

o 'window.onbeforeunload = null;' –

0

No se relacionó inmediatamente con esta pregunta (no vote de forma negativa debido a eso), pero puede ayudar a alguien, sin embargo, esto es lo que yo uso en 1.x angular y mecanografiado:

this.$window.onbeforeunload =() => null; 
+0

Y ... alguien lo rechazó. Lol – Simon

+0

Tal vez porque esto requiere que angular y TypeScript para hacer algo que se puede hacer en una sola línea de código sin él. – Ibu

+0

Quizás, pero explícitamente indiqué que, aunque poco relacionado, alguien que pueda estar usando Angular puede encontrar uso en esto. TypeScript en este código es irrelevante; resultó ser lo que forma parte de mi configuración. Puedo entender no votar pero la votación negativa es un poco mezquina. Por otra parte, tal vez estoy obteniendo mis patadas en un giro aquí. – Simon

0

jQuery ≥ 1,7

con jQuery 1.7 en adelante la API de eventos se ha actualizado, .bind()/.unbind() sigue estando disponible para compatibilidad con versiones anteriores, pero el método preferido es usar las funciones on()/off(). Lo siguiente sería ahora,

$('#myimage').click(function() { return false; }); // Adds another click event 
$('#myimage').off('click'); 
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ }); 
$('#myimage').off('click.mynamespace'); 
Cuestiones relacionadas