¿Cómo cargar un script jQuery al final?

2 abr 2012, 06:30:34
Vistas: 20.7K
Votos: 2

¿Cómo hacer que esto se cargue al final?

 <script type="text/javascript">
  jQuery(document).ready(function(){
   jQuery("div.domTip_tipBody").mouseover(function(){
   jQuery("#yyy a.tippy_link").css("background-color","amarillo");});  

   jQuery("div.domTip_tipBody").mouseout(function(){
   jQuery("#yyy a.tippy_link").css("background-color","rojo");
 }); 
 });  
 </script>

Se está ejecutando antes de que "div.domTip_tipBody" se ejecute (que es generado por un shortcode) así que nada sucede.

He intentado:

<script src="script.js" type="text/javascript" defer="defer"></script>

en mi header.php antes de

</head> 

pero no ayuda.

He visto "window.onload =" pero no estoy seguro de cómo aplicarlo.

Cualquier idea es apreciada.

Gracias

1
Comentarios

Usa wp_footer para colocar esto en el área del pie de página. Lee cómo: http://codex.wordpress.org/Plugin_API/Action_Reference/wp_footer

Rutwick Gangurde Rutwick Gangurde
2 abr 2012 06:35:01
Todas las respuestas a la pregunta 5
5
  1. Coloca el código dentro de un archivo llamado tu_nombre.js.
  2. Añade lo siguiente a tu archivo functions.php:

    function wpse47618_load_script_last()
    {
        wp_enqueue_script( 'zzz_tu_nombre', get_stylesheet_directory_uri().'tu_nombre.js', array( 'jquery' ), '0', true );
    }
    add_action( 'wp_enqueue_scripts', 'wpse47618_load_script_last', 99999 );
    
  3. Verifica en el código fuente de tus páginas si el script se añadió correctamente y si la ruta al archivo es correcta. Si usas FireBug u otras herramientas de desarrollo, haz clic en el nombre del archivo y comprueba que el contenido del script esté ahí.
  4. ¡Listo!
2 abr 2012 07:09:37
Comentarios

Gracias Kaiser, esto colocó el script al final, por alguna razón el js todavía no está leyendo los selectores generados por el shortcode, ¡pero funciona para todo lo demás!

xyz xyz
2 abr 2012 17:11:14

n/p. Nota: entonces esto sería una pregunta para SO. Intentaría simplemente usar la consola en tu FireBug/Chrome dev bar/IE dev tools, etc. Solo escribe console.log( jQuery( 'div' ) ); y verás si la selección funcionó.

kaiser kaiser
2 abr 2012 17:13:20

Kaiser, no conocía esa funcionalidad, gracias. Al usarla veo que aparecen estos elementos div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody

xyz xyz
2 abr 2012 19:39:21

Ignora lo anterior. Kaiser, gracias por la respuesta, no conocía esa funcionalidad, gracias. Al usarla veo que aparecen estos div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody si hago clic en ellos me llevan a selectores CSS. He intentado usar el resultado "raw" de arriba y los selectores CSS a los que me dirigen pero ninguno hace que mi js los lea. ¿Hay algo que se pueda hacer para ayudar al js a leer estos selectores?

xyz xyz
2 abr 2012 19:48:24

Como dije: Eso es una pregunta para SO. Pero de todos modos: Si puedes seleccionarlos ahí, entonces funcionan. También puedes colocar el console.log() directamente en tu script y ver la salida de la consola. Eso prueba que el script está funcionando. Entonces es algo más. Así que: Inténtalo y si no -> SO.

kaiser kaiser
2 abr 2012 21:11:46
2

Esto parece un problema de delegación de eventos en jQuery. Si los nuevos elementos DOM se agregan después de que la página se haya cargado, jQuery no los leerá. Por lo tanto, necesitas indicarle a jQuery de antemano que vincule un evento si existe algún elemento de este tipo ahora o en el futuro.

Prueba con $.delegate('div.domTip_tipBody','mouseover', function(e){ jQuery("#yyy a.tippy_link").css("background-color","yellow");}); });

Consulta http://api.jquery.com/delegate/ , http://lab.distilldesign.com/event-delegation/

3 abr 2012 16:31:55
Comentarios

Hola Rashid, gracias por tu respuesta. Tengo esperanza de que esto resuelva mi problema. Probé esto add_action('wp_footer','myscript_in_footer'); function myscript_in_footer(){ ?> $.delegate('p','mouseover', function(e){ jQuery("#yyy a.tippy_link").css("background-color","yellow");}); $.delegate('p', function(e){ jQuery("#yyy a.tippy_link").css("background-color","red"); }); });</script> <?php } Cambié "div.domTip_tipBody" por "p" para verificar si la función funciona, pero no lo hace. ¿Puedes ver qué necesita cambiarse para que funcione?

xyz xyz
3 abr 2012 22:13:07

Por favor lee este en su lugar. Gracias por tu respuesta. Tengo esperanza de que esto resuelva mi problema. Probé esto add_action('wp_footer','myscript_in_footer'); <script type="text/javascript"> jQuery(document).ready(function(){ ?> $.delegate('p','mouseover', function(e){ jQuery("#yyy a.tippy_link").css("background-color","yellow");}); $.delegate('p', function(e){ jQuery("#yyy a.tippy_link").css("background-color","red"); }); });</script> <?php } Cambié "div.domTip_tipBody" por "p" para verificar si la función funciona, pero no lo hace. ¿Puedes ver qué necesita cambiarse para que funcione?

xyz xyz
3 abr 2012 22:20:18
1

Puedes simplemente agregar el script a footer.php y probablemente funcione, pero no es la mejor manera de evitar conflictos con jQuery.

La mejor forma es encolar el script desde un archivo separado. Revisa http://codex.wordpress.org/Function_Reference/wp_enqueue_script que tiene un parámetro para cargar scripts en el footer mediante wp_footer.

Y consulta la Guía del Desarrollador para JavaScript y CSS sin Conflictos en WordPress: http://wp.smashingmagazine.com/2011/10/12/developers-guide-conflict-free-javascript-css-wordpress/

2 abr 2012 06:58:17
Comentarios

Gracias songdogtech, los enlaces ampliaron mi comprensión, lo aprecio. Tendré que investigar sobre js y shortcode ya que el js no está leyendo la salida de mi shortcode.

xyz xyz
2 abr 2012 17:11:33
2
add_action('wp_footer','myscript_in_footer');
function myscript_in_footer(){
?>
<script type="text/javascript">
  jQuery(document).ready(function(){
   jQuery("div.domTip_tipBody").mouseover(function(){
   jQuery("#yyy a.tippy_link").css("background-color","yellow");});  

   jQuery("div.domTip_tipBody").mouseout(function(){
   jQuery("#yyy a.tippy_link").css("background-color","red");
 }); 
 });  
 </script>
<?php
}
2 abr 2012 09:56:29
Comentarios

Gracias Rajeev, probé tu código y logró colocar el js al final, ahora tengo dos formas de hacer esto. El js aún no funciona en la salida de mi shortcode, así que debe ser un problema diferente.

xyz xyz
2 abr 2012 17:11:26

Insertar esto directamente en el footer es la manera incorrecta de hacerlo.

kaiser kaiser
24 abr 2012 21:41:59
0

Esto podría llegar un 'poco' tarde, pero por si alguien todavía está buscando:

http://css-tricks.com/snippets/jquery/run-javascript-only-after-entire-page-has-loaded/

¡Una forma bonita y sencilla de hacerlo!

29 oct 2013 17:38:21