Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2013, 20:10
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

Функции не работают в блоке 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 выдаёт ошибку "функция не определена".

Может кто подсказать в чём тут дело?
Ответить с цитированием
  #2 (permalink)  
Старый 08.10.2013, 20:18
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

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

если да, то вместо function toCities(country_code) напиши window.toCities = function(country_code)
Ответить с цитированием
  #3 (permalink)  
Старый 08.10.2013, 20:38
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

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

Может в этом дело? Сейчас попробую ваш совет.
Ответить с цитированием
  #4 (permalink)  
Старый 08.10.2013, 20:42
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

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

Спасибо! А можно объяснить механику этого дела? Как говориться, люблю всё знать.
Ответить с цитированием
  #5 (permalink)  
Старый 08.10.2013, 21:49
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

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

window.toCities = function(country_code) явно помещает переменную в глобальное scope (которое по совместительству является объектом window).
Ответить с цитированием
  #6 (permalink)  
Старый 10.10.2013, 11:39
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Две функции в блоке <div> Helly Элементы интерфейса 3 12.04.2013 11:51
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
не работают функции при их вызове(не отображаются кнопки) badfilin Общие вопросы Javascript 0 08.04.2008 20:18