Вызов JavaScript функции из другого файла

28 мар. 2016 г., 01:58:29
Просмотры: 32.4K
Голосов: 0

В WordPress, чтобы использовать $ вместо префикса jQuery, я добавил следующий код вокруг всего js кода:

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

Это работает хорошо, но я не могу вызвать объект из другого javascript файла, сохраняется следующая проблема:

Slider is not defined

Вот мой код:

file1.js

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

file2.js

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

Похоже, что из-за того, что рабочие пространства двух js файлов различны, они не могут вызывать функции друг друга. Есть ли решение?

0
Все ответы на вопрос 2
1

Ваша проблема в том, что Slider недоступен вне своей области видимости, так как он определён внутри .ready(), хотя вы использовали сокращённую запись. Функция должна быть доступна в глобальной области видимости:

file1.js

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

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

file2.js

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

Если вы хотите, чтобы Slider оставался внутри document ready, вам нужно использовать функциональное выражение, чтобы добавить функцию в глобальный объект:

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

Смотрите также: https://stackoverflow.com/questions/1449435/splitting-up-jquery-functions-across-files

28 мар. 2016 г. 04:38:20
Комментарии

Именно это мне и нужно, спасибо. Мне нужно использовать jQuery в функции Slider, поэтому она должна оставаться в области видимости jQuery, но добавление "window" перед именем функции добавит её в глобальный объект.

Trong Lam Phan Trong Lam Phan
29 мар. 2016 г. 02:44:05
0

У меня была такая же проблема.

Вы также можете решить её с помощью:

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

ваш код здесь

});

Вам также нужно использовать этот трюк во всех ваших JavaScript-файлах, я имею в виду var $ = jQuery.noConflict();.

После этого Dammeul прав.

28 мар. 2016 г. 04:57:38