javascript secuencia de eventos/jerarquía archivo incluido vs en archivo

Defino al mismo oyente en document.ready tanto en un archivo de script externo como en un archivo. Tengo uno en un archivo externo central porque siempre querré realizar la eliminación al hacer clic en un elemento con clase .delete, pero a veces también quiero hacer otras cosas.

//script.js
$(document).ready(function(){
    $('.delete').click(function(){
        //send AJAX delete
    });
});

//index.php
<script type="text/javascript">
    $(document).ready(function(){
        $('.delete').click(function(){
            var msg = "Are you sure you want to delete the <?=$item?>'"+$(this).attr("name")+"'?";
            if ( confirm(msg) ) {
                removeDataTableRow( $(this)... );
            }//fi
        });
    });
</script>

El oyente en el archivo js externo se dispara antes que el oyente del script en el archivo, pero quiero lo contrario (y quiero cancelar el segundo evento del archivo externo si confirm=false).

Pensé en configurar una variable en el script en el archivo y configurar esa variable en el externo para conocer el resultado de la confirmación, pero el script en el script externo aún se activa primero y, como tal, la variable aún no se ha definido correctamente: /

EDITAR: He leído pregunta 282245 que cubre la precedencia de eventos de diferentes oyentes, pero no para las ocurrencias del mismo oyente.

preguntado el 27 de julio de 12 a las 21:07

¿Cuál es el orden de la etiqueta de secuencia de comandos que trae el archivo externo y la etiqueta de secuencia de comandos que define JS en la página? -

Además, un consejo rápido: en lugar de $(document).ready(function(){ solo puedes hacer $(function(){. -

@machineghost, el archivo js externo está incluido en el <head> antes de que se defina el script en el archivo (con CSS que establece la precedencia del último). Por cierto, el elemento principal se define en un archivo central separado y se incluye a través de php, por lo que realmente no puedo cambiar el orden (el script en el archivo debe definirse por archivo). -

Tal vez esto ayude: stackoverflow.com/questions/2360655/… ... pero las cosas podrían haber cambiado un poco. -

1 Respuestas

El orden de ejecución de Javascript es bastante simple. A menos que esté utilizando código asincrónico (por ejemplo, un controlador de eventos y una solicitud AJAX o un setTimeout), el código siempre se ordena secuencialmente. En otras palabras, el navegador comienza en la parte superior de la página, ejecuta todo en la primera etiqueta de secuencia de comandos que encuentra, pasa a la siguiente etiqueta de secuencia de comandos, etc.

Las cosas asincrónicas confunden un poco las cosas, pero la regla general (al menos en la mayoría de las bibliotecas) es que el primer controlador que se conecta se ejecuta primero. Entonces, en este caso, su controlador externo document.ready se activa porque aparece antes en la página que su etiqueta de secuencia de comandos en la página.

Respondido 27 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.