Non riesco a chiamare la funzione Javascript - problema di scope?

13 nov 2012, 20:51:26
Visualizzazioni: 14.6K
Voti: 0

Ottengo un errore "method not defined" quando provo a chiamare una funzione caricata con wp_enqueue_script da site.js.

Sospetto che sia un problema di scope causato dai wrapper jQuery ready. Come posso risolverlo?

site.js (caricato nell'head)

jQuery(document).ready(function($) {
  $(window).load(function() { // attende che tutto sia caricato
    doSomething(); // risultato: face palm
  });
});

my-script.js (caricato nel footer)

jQuery(document).ready(function($) {

  function doSomething() {
    alert("È ora di una pausa caffè!");
  }
});

functions.php

wp_register_script( 'my-script', get_template_directory_uri().'/js/my-script.js', array( 'jquery' ), '', true );
wp_enqueue_script( 'my-script' );
// Passa variabili PHP
wp_localize_script( 'my-script', 'my_script', localize_post_vars() );
0
Tutte le risposte alla domanda 1
2

Devi inserire la tua funzione doSomething nel namespace corretto, o almeno in un namespace. Il modo più semplice sarebbe inserirla nel namespace window:

jQuery(document).ready(function($) {
    window.doSomething = function() {
        alert("È ora di una pausa caffè!");
    };
});
13 nov 2012 21:29:28
Commenti

Grazie! Se ometto window., anche il codice di assegnazione della funzione funziona. In questo caso sta utilizzando il namespace window di default?

manafire manafire
13 nov 2012 21:33:55

Esatto, per forzare la variabile a essere locale basta aggiungere var davanti alla dichiarazione: var doSomething = function() { ... };.

totels totels
13 nov 2012 22:00:56