Как вызвать функцию jQuery из другого файла JS

0

У меня есть следующие main.js

$(document).ready(function() {
  $.getScript('another.js', function() {
    another();
  });
});

... и следующий another.js

$(function another() {
  $('section#my-section').after('<a href="#">my link</a>');
});

Структура каталогов выглядит следующим образом:

+ my.html
+ js
  +--- main.js
  +--- another.js

another() никогда не вызывается. Зачем? Может ли кто-нибудь указать мне в правильном направлении?

Благодарю!

  • 1
    Это зависит от порядка вызова ваших файлов в вашем HTML-файле. Убедитесь, что фактическая функция загружена перед другим файлом, который ее вызывает.
  • 0
    @NickDugger не в этом случае ... Вы явно не читали код.
Показать ещё 4 комментария
Теги:

2 ответа

4

Вы определили another используя выражение функции, и передали его в $().

Вы должны сделать его глобальным.

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

  • 0
    ^^ Вот почему все думают, что каждый вызов функции должен быть заключен в оболочку jquery или быть функцией annon ??????
  • 2
    @ryan - Потому что это :)
Показать ещё 3 комментария
1

Мало что нужно учитывать:

Сначала вы не можете вызвать another() внутри main.js, потому что он завернут внутри $() и его недоступно в глобальной области. Поэтому вам нужно удалить этот другой();

Таким образом, ваш код в another.js будет похож на

function another() {
  $('section#my-section').after('<a href="#">my link</a>');
}

Тогда, если вы тестируете это в своем локальном браузере Chrome, это может не сработать.

Поскольку chrome не поддерживает локальный вызов ajax, и он не даст XMLHttpRequest cannot load

В любом случае в firefox и других браузерах он будет работать нормально.

Просто вам нужно загрузить main.js после jquery

Я проверил ваш код на своем локальном компьютере, используя firefox, и он отлично работал.

  • 0
    $(function another() {...}); не может работать должным образом при попытке вызвать another() метод another() снова. То есть, следуя коду OP, OP не нужно вызывать этот метод при успешном обратном вызове $ .getScript (), не имеет смысла
  • 0
    Странно, но это просто сработало .. Я тоже трижды проверил это, прежде чем сделать этот ответ: P
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню