Вызвать функцию внутри $ ('document'). Ready - PullRequest
1 голос
/ 14 февраля 2012

У меня есть функция, определенная внутри $('document').ready.

$('document').ready(function() {
  function visit(url) {
    $.ajax({
      url: url,
      container: '#maincontainer',
      success: function(data) {
        init();
      }
    });
  }

  function init() {
    ...
  }
)};

Но когда я вызываю init() в консоли Chrome, я получаю: ReferenceError: init is not defined.

Обновление: Спасибо всем за помощь.Я сделал window.init = init;, и он отлично работает.

Ответы [ 5 ]

3 голосов
/ 14 февраля 2012

Ваша функция init содержится в области действия функции, которую вы передали jQuery.ready. Это хорошая вещь , это означает, что вы не создали ненужный глобал.

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

window.init = init;

Поскольку window - это глобальный объект в браузерах, это позволит вам вызывать его из консоли Chrome без префикса window.. Но делайте это только в случае крайней необходимости, глобальный охват уже достаточно переполнен.

1 голос
/ 14 февраля 2012

Объявления функций, как и ваши function init() {}, ограничены областью, в которой они определены. Если вы хотите использовать init в другом месте, сделайте следующее:

var init;
$('document').ready(function() {
    init = function() {};
});
0 голосов
/ 14 февраля 2012

Я думаю, что вы хотите поместить определение своей функции вне функции ready, необязательно, чтобы документ был готов определить функцию, даже если функция ссылается на документ. Держите в уме ссылки внутри функции не выполняются до тех пор, пока функция на самом деле не будет выполнена, определение функции аналогично определению текстовой константы. Вместо этого используйте следующее:

function visit(url) {
    $.pjax({
        url: url,
        container: '#maincontainer',
        success: function(data) {
        init();
        }
    });
}

function init() {
    ...
}

$(function () {
    init();
});
0 голосов
/ 14 февраля 2012

Попробуйте что-то вроде этого:

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

  var objScope = this;

  function visit(url) {
    $.pjax({
      url: url,
      container: '#maincontainer',
      success: function(data) {
        objScope.init();
      }
    });
  }

  function init() {
    ...
  }
)};
0 голосов
/ 14 февраля 2012

Функции определяются только областью, в которой вы их определяете.

Если вы настаиваете на этом методе, используйте вместо этого синтаксис init = funciton().Это создаст глобальную переменную (поскольку вы не собираетесь помещать туда var), на которую можно ссылаться где-либо.положить их в .ready().

...