Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Функции не работают в блоке jQuery(function($){ }); (https://javascript.ru/forum/jquery/41997-funkcii-ne-rabotayut-v-bloke-jquery-function-%24-%7B-%7D-%3B.html)

Dozentos 08.10.2013 20:10

Функции не работают в блоке 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('<h5>Что-то не так...</h5>');
}
});
}

function toCities(country_code){
$('#cities').html('<div id="title_city" class="vibor"><span>Пожалуйста выберите нужный вам город.</span></div><div id="city"></div>');
$('html, body').animate({scrollTop: $('#cities').offset().top}, 'slow');
city_ajax(country_code);
return false;
}

Они прекрасно работают. Но если их заключить в блок jQuery(function($){ }); они работать прекращают. В средствах разрабодчика Chrome выдаёт ошибку "функция не определена".

Может кто подсказать в чём тут дело?

Яростный Меч 08.10.2013 20:18

наверно одна из этих функций вызывается откуда-то "снаружи" (подозреваю, что toCities)

если да, то вместо function toCities(country_code) напиши window.toCities = function(country_code)

Dozentos 08.10.2013 20:38

php-скрипт формирует списки для вставки в блок на основе ajax-запроса. В скрипте есть строка: $listing_countries .= "<li><a href='javascript: void(0);' onClick='toCities(".$row['id'].");'><img src='view_image/".$row['flag']."' /> ".$row['name']."</a></li>";

Может в этом дело? Сейчас попробую ваш совет.

Dozentos 08.10.2013 20:42

Вы были правы! Всё прекрасно работает!

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

Яростный Меч 08.10.2013 21:49

Цитата:

Сообщение от Dozentos
А можно объяснить механику этого дела?

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

window.toCities = function(country_code) явно помещает переменную в глобальное scope (которое по совместительству является объектом window).

Dozentos 10.10.2013 11:39

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


Часовой пояс GMT +3, время: 13:50.