No puedo llamar a función Javascript - ¿Problema de ámbito?

13 nov 2012, 20:51:26
Vistas: 14.6K
Votos: 0

Recibo un error de método no definido al intentar llamar a una función cargada con wp_enqueue_script desde site.js.

Supongo que es por el ámbito causado por los wrappers de jQuery ready. ¿Cómo puedo solucionarlo?

site.js (cargado en head)

jQuery(document).ready(function($) {
  $(window).load(function() { // espera hasta que todo haya cargado
    doSomething(); // resulta en un face palm
  });
});

my-script.js (cargado en el footer)

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

  function doSomething() {
    alert("¡Hora de un descanso para café!");
  }
});

functions.php

wp_register_script( 'my-script', get_template_directory_uri().'/js/my-script.js', array( 'jquery' ), '', true );
wp_enqueue_script( 'my-script' );
// Pasar variables PHP
wp_localize_script( 'my-script', 'my_script', localize_post_vars() );
0
Todas las respuestas a la pregunta 1
2

Necesitas colocar tu doSomething en el espacio de nombres correcto, o al menos en un espacio de nombres. La forma más sencilla sería colocarlo en el espacio de nombres window:

jQuery(document).ready(function($) {
    window.doSomething = function() {
        alert("¡Hora de un descanso para el café!");
    };
});
13 nov 2012 21:29:28
Comentarios

¡Gracias! Si omito window., el código de asignación de la función también funciona. ¿Está tomando por defecto el espacio de nombres window en este caso?

manafire manafire
13 nov 2012 21:33:55

Sí, para forzar que la variable sea local simplemente añadirías var delante de la declaración: var doSomething = function() { ... };.

totels totels
13 nov 2012 22:00:56