Come caricare uno script jQuery per ultimo?

2 apr 2012, 06:30:34
Visualizzazioni: 20.7K
Voti: 2

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

1
Commenti

Utilizza wp_footer per inserirlo nell'area del footer. Leggi come fare: http://codex.wordpress.org/Plugin_API/Action_Reference/wp_footer

Rutwick Gangurde Rutwick Gangurde
2 apr 2012 06:35:01
Tutte le risposte alla domanda 5
5
  1. Inserisci il codice all'interno di un file chiamato your_name.js.
  2. 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 );
    
  3. 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.
  4. Hai finito.
2 apr 2012 07:09:37
Commenti

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ò!

xyz xyz
2 apr 2012 17:11:14

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 kaiser
2 apr 2012 17:13:20

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

xyz xyz
2 apr 2012 19:39:21

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?

xyz xyz
2 apr 2012 19:48:24

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.

kaiser kaiser
2 apr 2012 21:11:46
2

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/

3 apr 2012 16:31:55
Commenti

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?

xyz xyz
3 apr 2012 22:13:07

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?

xyz xyz
3 apr 2012 22:20:18
1

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/

2 apr 2012 06:58:17
Commenti

Grazie songdogtech, i link hanno tutti contribuito alla mia comprensione, lo apprezzo molto. Dovrò approfondire js e shortcode perché il js non sta leggendo l'output del mio shortcode.

xyz xyz
2 apr 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","giallo");});  

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

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.

xyz xyz
2 apr 2012 17:11:26

Inserire direttamente questo nel footer è il modo sbagliato di farlo.

kaiser kaiser
24 apr 2012 21:41:59
0

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!

29 ott 2013 17:38:21