Supongamos que adjuntamos un controlador .click()
a una etiqueta de anclaje (<a>
) en la devolución de llamada $(document).ready
. Este controlador cancelará la acción predeterminada (siguiendo el href
) y mostrará una alerta.
Lo que me gustaría saber es cuándo se ejecutará exactamente la devolución de llamada y si es posible que el usuario haga clic en el delimitador (el documento se ha mostrado en el navegador) pero el evento aún no se ha conectado.
Aquí hay diferentes páginas HTML que contienen un delimitador pero el orden de inclusión de las secuencias de comandos es diferente. ¿Cuál es la diferencia (si hay alguna) entre ellos? ¿Los diferentes navegadores se comportarán de manera diferente?
Página1:
<html>
<head>
<title>Test 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('a').click(function() {
alert('overriding the default action');
return false;
});
});
</script>
</head>
<body>
<a href="http://www.google.com">Test</a>
</body>
</html>
Página2:
<html>
<head>
<title>Test 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
</head>
<body>
<a href="http://www.google.com">Test</a>
<script type="text/javascript">
$(function() {
$('a').click(function() {
alert('overriding the default action');
return false;
});
});
</script>
</body>
</html>
Page3:
<html>
<head>
<title>Test 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<a href="http://www.google.com">Test</a>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('a').click(function() {
alert('overriding the default action');
return false;
});
});
</script>
</body>
</html>
Entonces, ¿es posible que un usuario se le redirecciona a la href
haciendo clic en el anclaje y nunca ve la alerta (ignorando el caso de Javascript desactivado, por supuesto)? ¿Podría suceder esto en cualquiera de los ejemplos que proporcioné?
Todo lo que necesito es asegurarme de que el controlador de eventos click
se haya adjuntado al ancla antes de que el usuario tenga la posibilidad de hacer clic en este ancla. Sé que puedo proporcionar un href
vacío y luego mejorarlo progresivamente en javascript, pero esta es una pregunta más general.
¿Qué sucederá en caso de que el HTML sea generado rápidamente por el servidor web, pero la biblioteca jquery tarda tiempo en ser extraída de un servidor distante? ¿Esto influenciará mi escenario? ¿Cuál es el orden de inclusión de los scripts en comparación con la carga del DOM? ¿Podrían hacerse en paralelo?
Así que está diciendo que la única manera de lograr lo que estoy buscando (tener la garantía de que el usuario ve una alerta antes de redirigir) es para cualquiera que use 'onclick' o adjuntar el' manejador click' justo después del enlace (no usando '$ (document) .ready')? –
los ejemplos son diferentes dependiendo de si tiene activado el almacenamiento en búfer de salida o si utiliza codificación fragmentada. – galambalazs
¿Cuál de los tres ejemplos sería el mejor en términos de mi objetivo asumiendo que el almacenamiento en memoria está habilitado? ¿Qué hay de la codificación fragmentada? –