personalizado metodo event ejemplo chrome beforeunload javascript internet-explorer-9 onbeforeunload

javascript - metodo - El evento onbeforeunload es demasiado entusiasta en IE9



onbeforeunload event properties (5)

Aquí hay una muestra de prueba html:

<!DOCTYPE html> <html> <body> <a href="javascript:alert(''Not going anywhere!'');">Go nowhere 1</a> <a href="javascript:void(0);" onclick="alert(''Not going anywhere!'');">Go nowhere 2</a> <a href="http://www.google.com">Go somewhere</a> <script type="text/javascript"> window.onbeforeunload = function() { return "Really leave?"; }; </script> </body> </html>

Esto está disponible como una página de trabajo aquí: timjeanes.com/ie9_onbeforeunload.htm

En Firefox, Chrome y Safari, obtengo el comportamiento que quiero. Es decir, al hacer clic en cualquiera de los dos primeros enlaces se muestra un cuadro de diálogo de alerta; Al hacer clic en el tercer enlace (o, de lo contrario, navegar) se muestra el mensaje "¿Está seguro de que desea abandonar esta página?" mensaje.

Sin embargo, en IE9, el mensaje "¿Está seguro de que desea abandonar esta página?" El mensaje también se muestra cuando hace clic en cualquiera de los dos primeros enlaces, aunque no se esté realizando la navegación, solo estamos ejecutando algunos javascript.

¿Hay algo que estoy haciendo mal? ¿O hay una buena solución para IE?

Una opción sería usar href = "#" y poner mi javascript en el clic. No estoy interesado en eso, ya que lleva al usuario a la parte superior de la página, y mi página de la vida real es bastante alta.

No he probado en otras versiones de IE.


En realidad no es un error que el "¿Estás seguro de que quieres salir de esta página?" el mensaje aparece cuando haces clic en los primeros enlaces; Parece ser una "característica" en IE 9 - Más razones me disgustan de IE


Ese es un error bastante desafortunado. Parece que tendrás que solucionarlo, y usar el método de enlace hash es probablemente la mejor manera. Para evitar llevar al usuario a la parte superior de la página, cancele el evento utilizando event.preventDefault() y event.returnValue = false .

function myClickHandler(e) { if (e.preventDefault) e.preventDefault(); e.returnValue = false; alert("Not going anywhere!"); }

Llámalo así:

<a href="#" onclick="myClickHandler(event)">Go nowhere 1</a>

Editar: Podrías cancelar el evento para todos los hash-links en tu página de esta manera:

var links = document.links; for (var i = 0; i < links.length; i++) { var link = links[i]; if (link.href == "#") { if (link.addEventListener) { link.addEventListener("click", cancelEvent, false); } else if (link.attachEvent) { link.attachEvent("onclick", cancelEvent); } } } function cancelEvent(e) { e = e || window.event; if (e.preventDefault) e.preventDefault(); e.returnValue = false; }

O con jQuery usando solo una línea de código:

$("a[href=''#'']").click(function (e) { e.preventDefault(); });


No debe vincular un evento para hacer clic con href="javascript:... : a continuación no es bueno.

<a href="javascript:alert(''Not going anywhere!'');">Go nowhere 1</a>

Si va a utilizar un onclick y anular el href, simplemente devuelva falso en el onclick.

<a onclick="alert(''Not going anywhere!'');return false;">Go nowhere 2</a>


Una solución más sencilla es utilizar onunload en IE y antes de descargar en otros navegadores.


#null in href para evitar que la página salte en lugar de # y script en onclick=""