Nu pot apela funcția Javascript - problemă de scope?

13 nov. 2012, 20:51:26
Vizualizări: 14.6K
Voturi: 0

Primesc o eroare "method not defined" când încerc să apelez o funcție încărcată cu wp_enqueue_script din site.js.

Presupun că e din cauza scope-ului creat de wrapper-ele jQuery ready? Cum pot rezolva această problemă?

site.js (încărcat în head)

jQuery(document).ready(function($) {
  $(window).load(function() { // așteaptă până când totul s-a încărcat
    doSomething(); // rezultă într-o eroare
  });
});

my-script.js (încărcat în footer)

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

  function doSomething() {
    alert("E timpul pentru o pauză de cafea!");
  }
});

functions.php

wp_register_script( 'my-script', get_template_directory_uri().'/js/my-script.js', array( 'jquery' ), '', true );
wp_enqueue_script( 'my-script' );
// Trimite variabile PHP în JavaScript
wp_localize_script( 'my-script', 'my_script', localize_post_vars() );
0
Toate răspunsurile la întrebare 1
2

Trebuie să plasezi funcția doSomething în namespace-ul corect, sau măcar într-un namespace. Cea mai simplă metodă ar fi să o plasezi în namespace-ul window:

jQuery(document).ready(function($) {
    window.doSomething = function() {
        alert("E timpul pentru o pauză de cafea!");
    };
});
13 nov. 2012 21:29:28
Comentarii

Mulțumesc! Dacă omit window., codul de atribuire a funcției funcționează și el. Implicit, se folosește namespace-ul window în acest caz?

manafire manafire
13 nov. 2012 21:33:55

Da, pentru a forța variabila să fie locală, ai putea adăuga var înaintea declarației: var doSomething = function() { ... };.

totels totels
13 nov. 2012 22:00:56