Come caricare uno script jQuery per ultimo?
Come faccio a far caricare questo script per ultimo?
<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>
Lo script viene eseguito prima che "div.domTip_tipBody" venga generato (che viene creato da uno shortcode) quindi non succede nulla.
Ho provato:
<script src="script.js" type="text/javascript" defer="defer"></script>
nel mio header.php prima di
</head>
ma non funziona.
Ho visto "window.onload =" ma non sono sicuro di come applicarlo.
Qualsiasi suggerimento è apprezzato.
Grazie

- Inserisci il codice all'interno di un file chiamato
your_name.js
. Aggiungi il seguente codice al tuo file
functions.php
:function wpse47618_load_script_last() { wp_enqueue_script( 'zzz_your_name', get_stylesheet_directory_uri().'your_name.js', array( 'jquery' ), '0', true ); } add_action( 'wp_enqueue_scripts', 'wpse47618_load_script_last', 99999 );
- Controlla nel codice sorgente delle tue pagine se lo script è stato aggiunto correttamente e se il percorso del file è corretto. Se utilizzi FireBug o altri strumenti per sviluppatori, clicca sul nome del file e verifica che il contenuto dello script sia presente.
- Hai finito.

Grazie Kaiser, questo ha posizionato lo script in fondo, per qualche motivo il js non sta ancora leggendo i selettori generati dallo shortcode, funziona per tutto il resto però!

n/p. Nota che questa sarebbe una domanda per SO. Proverei a usare semplicemente la console nei tuoi strumenti di sviluppo FireBug/Chrome dev bar/IE dev tools, ecc. Basta scrivere console.log( jQuery( 'div' ) );
e vedrai se la selezione ha funzionato.

Kaiser, non conoscevo questa funzionalità, grazie. Quando la uso vedo apparire questi div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody

Ignora quanto sopra. Kaiser, grazie per la risposta, non conoscevo quella funzionalità, grazie. Quando la uso vedo apparire questi elementi div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody
se clicco su di essi mi portano ai selettori CSS. Ho provato a usare l'output "raw" sopra e i selettori CSS a cui mi indirizzano, ma nessuno di questi viene letto dal mio js. C'è qualcosa che si può fare per aiutare il js a leggere questi selettori?

Come ho detto: Questa è una domanda per SO. Ma comunque: Se riesci a selezionarli lì, allora funzionano. Puoi anche inserire il console.log()
direttamente nel tuo script e vedere l'output nella console. Questo prova che lo script funziona. Quindi è qualcos'altro. Quindi: Prova e se non funziona -> SO.

Questo sembra un problema di delega degli eventi in jQuery. Se nuovi elementi DOM vengono aggiunti dopo il caricamento della pagina, jQuery non li riconoscerà. Quindi è necessario dire a jQuery in anticipo di associare un evento se un tale elemento esiste ora o in futuro.
Prova $.delegate('div.domTip_tipBody','mouseover', function(e){
jQuery("#yyy a.tippy_link").css("background-color","yellow");});
});
Vedi http://api.jquery.com/delegate/ , http://lab.distilldesign.com/event-delegation/

Ciao Rashid, grazie per la tua risposta, spero che questo risolverà il mio problema. Ho provato questo 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
}
Ho cambiato "div.domTip_tipBody" in "p" per verificare se la funzione funziona, ma non è così. Riesci a vedere cosa deve essere modificato per farlo funzionare?

Per favore leggi questo invece. Grazie per la tua risposta, spero che questo risolverà il mio problema. Ho provato questo 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
}
Ho cambiato "div.domTip_tipBody" in "p" per verificare se la funzione funziona, ma non è così. Riesci a vedere cosa deve essere modificato per farlo funzionare?

Puoi semplicemente aggiungere lo script a footer.php e probabilmente funzionerà, ma non è il modo migliore per evitare conflitti con jQuery.
Il modo migliore è accodare lo script da un file separato. Vedi http://codex.wordpress.org/Function_Reference/wp_enqueue_script che ha un parametro per caricare gli script nel footer tramite wp_footer.
E consulta la Guida per Sviluppatori su JavaScript e CSS Senza Conflitti in 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","giallo");});
jQuery("div.domTip_tipBody").mouseout(function(){
jQuery("#yyy a.tippy_link").css("background-color","rosso");
});
});
</script>
<?php
}

Grazie Rajeev, ho provato il tuo codice e mette il js in fondo, ora ho due modi per farlo. Il js ancora non funziona sull'output del mio shortcode, quindi deve essere un problema diverso.

Potrebbe essere un po' in ritardo, ma nel caso qualcuno stia ancora cercando:
http://css-tricks.com/snippets/jquery/run-javascript-only-after-entire-page-has-loaded/
Un modo semplice e carino per farlo!
