Подтвердить что ты не робот

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

У меня есть два внешних файла .js. Первая содержит функцию. Вторая функция вызывает функцию.

file1.js

$(document).ready(function() {

    function menuHoverStart(element, topshift, thumbchange) {

        ... function here ...

    } 

});

file2.js

$(document).ready(function() {

    setTimeout(function() { menuHoverStart("#myDiv", "63px", "myIMG"); },2000); 

});

Проблема в том, что функция не работает. Мне нужны два отдельных файла, потому что file2.js динамически вставляется в зависимости от определенных условий. Эта функция работает, если я включаю строку setTimeout... в конец file1.js

Любые идеи?

4b9b3361

Ответ 1

Проблема заключается в том, что menuHoverStart недоступен вне своей области (который определяется функцией обратного вызова .ready() в файле # 1). Вы должны сделать эту функцию доступной в глобальной области (или через любой объект, доступный в глобальной области):

function menuHoverStart(element, topshift, thumbchange) {
    // ...
}

$(document).ready(function() {
    // ...
});

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

$(document).ready(function() {
    window.menuHoverStart = function (element, topshift, thumbchange) {
        // ...
    };
    // ...
});

Ответ 2

Вы объявили menuHoverStart внутри функции (анонимный, который вы передаете готовой готовой). Это ограничивает его область действия этой функцией, и вы не можете вызывать ее извне этой функции.

Он ничего не делает, поэтому нет необходимости удерживать его, пока не закончится готовое событие, поэтому вы можете просто переместить его вне анонимной функции.

Тем не менее, стоит избегать глобалов, поэтому вы можете определить пространство имен (чтобы уменьшить риск конфликтов имен) и повесить эту функцию.

var MYNAMESPACE = {}; // In the global scope, not in a function
// The rest can go anywhere though
MYNAMESPACE.menuHoverStart = function (element, topshift, thumbchange) {