¿Cómo cargar un script jQuery al final?
¿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

- Coloca el código dentro de un archivo llamado
tu_nombre.js
. 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 );
- 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í.
- ¡Listo!

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!

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, 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

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?

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.

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/

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?

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?

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/

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
}

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.

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!
