Функции не работают в блоке jQuery(function($){ });

Есть две функции: function city_ajax(country_id){ data = "country_id="+country_id; $.ajax({url: 'php_city.php', type: 'get', data: data, dataType: 'json', success: function(json){ answer = json['answer']; $('#city').html(answer['listing_cities']); }, error: function(json){ $('#note').html('
Что-то не так...
'); } }); }function toCities(country_code){ $('#cities').html('
Пожалуйста выберите нужный вам город.
'); $('html, body').animate({scrollTop: $('#cities').offset().top}, 'slow'); city_ajax(country_code); return false; }Они прекрасно работают. Но если их заключить в блок jQuery(function($){ }); они работать прекращают. В средствах разрабодчика Chrome выдаёт ошибку "функция не определена".Может кто подсказать в чём тут дело?
5 ответов

наверно одна из этих функций вызывается откуда-то "снаружи" (подозреваю, что toCities)если да, то вместо function toCities(country_code) напиши window.toCities = function(country_code)


php-скрипт формирует списки для вставки в блок на основе ajax-запроса. В скрипте есть строка: $listing_countries .= "
  • ".$row['name']."
  • ";Может в этом дело? Сейчас попробую ваш совет.


    Вы были правы! Всё прекрасно работает!Спасибо! А можно объяснить механику этого дела? Как говориться, люблю всё знать.


    А можно объяснить механику этого дела?
    вкратце - function toCities(country_code) объявляет функцию в текущем scope (т.е. создает локальную переменную типа "функция"). Если поместить этот код внутрь function($){ }, локальная переменная будет видна только внутри это функции. А если не помещать - останется в глобальном scope и будет видна всем.window.toCities = function(country_code) явно помещает переменную в глобальное scope (которое по совместительству является объектом window).


    Благодарю! На этом, можно считать тема закрыта.