Как создать и вызвать пользовательскую функцию в jQuery

Мне нужно создать простую функцию в jQuery, которая вызывается в рамках нескольких других функций

$(document).ready(function() {
  function reload_cart() {
    alert('reload cart called');
  }
});
$(document).ready(function() {
  reload_cart(); //i need to call from here.
});
$(document).ready(function() {
  $('a.add_to_cart').live('click', function (e) {
    reload_cart(); //i need to call from here.
  });
});

Ошибка, которую я получаю в firebug: reload_cart() is not defined.

Ответы

Ответ 1

reload_cart является локальным для вашего первого обратного вызова $(document).ready(). Вы не можете вызвать его из внешней области.

Вы должны объединить свои функции вместе:

$(document).ready(function() {
    function reload_cart() {
        alert('reload cart called');
    }

    reload_cart();

    $('a.add_to_cart').live('click', function(e) {
        reload_cart();
    });
});

Еще лучше было бы создать объект cart, добавить reload к его прототипу и инициализировать его вне всех обратных вызовов.

Ответ 2

Да, потому что вы объявили функцию в области первой $(document).ready(function(){}), чтобы она не была доступна вне области видимости этой функции.

Я не уверен, почему вы бы назвали $(document).ready() более одного раза. Попробуйте следующее:

$(document).ready(function(){
   function reload_cart() {
       alert('reload cart called');
   }

   reload_cart(); //i need to call from here.


   $('a.add_to_cart').live('click', function(e) {
       reload_cart(); //i need to call from here.
   });
});

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

Ответ 3

Поместите определение своей функции:

function reload_cart() {
    alert('reload cart called');
}

Внешний документ. Уже.

В настоящее время он находится внутри документа document.ready.

$(document).ready(function(){
//reload_cart is only available here
    function reload_cart() {
        alert('reload cart called');
    }
});