Llamar a una función JavaScript desde otro archivo

28 mar 2016, 01:58:29
Vistas: 32.4K
Votos: 0

En WordPress, para usar $ en lugar del prefijo jQuery, agregué el siguiente código alrededor de todo el código JS:

jQuery(function($) {
    ...
});

Funciona bien, pero no puedo llamar a un objeto desde otro archivo JavaScript, persiste el siguiente error:

Slider is not defined

Este es mi código:

file1.js

jQuery(function($) {
    var slider = new Slider();
});    

file2.js

jQuery(function($) {
    function Slider() {
       this.nb_ele = 10;
    }
});

Parece que debido a que el espacio de trabajo de los dos archivos JS es diferente, no pueden llamar funciones entre sí. ¿Hay alguna solución?

0
Todas las respuestas a la pregunta 2
1

El problema que tienes es que Slider no es accesible fuera de su ámbito ya que está definido dentro del .ready(), aunque hayas usado la forma abreviada. La función necesita estar disponible en el ámbito global:

archivo1.js

function Slider() {
   this.nb_ele = 10;
}

jQuery(function($) {
  // ...
});

archivo2.js

jQuery(function($) {
    var slider = new Slider();
}); 

Si quieres que Slider permanezca dentro del document ready, necesitarás usar una expresión de función para añadirla al objeto global:

jQuery(function($) {
    window.Slider= function () {
       this.nb_ele = 10;
    };
});

Ver también: https://stackoverflow.com/questions/1449435/splitting-up-jquery-functions-across-files

28 mar 2016 04:38:20
Comentarios

Eso es lo que necesito, gracias. Necesito usar jQuery en la función Slider, por lo que debe permanecer en el alcance de jQuery, pero al agregar "window" antes del nombre de la función, se agregará al objeto global.

Trong Lam Phan Trong Lam Phan
29 mar 2016 02:44:05
0

Tuve el mismo tipo de problema.

También puedes resolverlo con:

var $ = jQuery.noConflict();
$(document).ready(function(){

tu código aquí

});

También necesitas usar ese truco en todos tus archivos JavaScript, me refiero a var $ = jQuery.noConflict();.

Después de eso, Dammeul tiene razón.

28 mar 2016 04:57:38