Вы должны инкапсулировать свой jQuery в блок "готов к документу":
jQuery(document).ready(function() {
jQuery('#location_country_code').change(function() {
alert('hi');
});
});
Что эквивалентно:
$( function() {
jQuery('#location_country_code').change(function() {
alert('hi');
});
});
Это ожидает загрузки вашего документа, прежде чем назначить обработчик. В противном случае ваш выбор еще не существует, и обработчик не применяется.
В качестве альтернативы, вы можете использовать live
вызов вместо:
jQuery('#location_country_code').live('change', function() {
alert('hi');
});
Функция live
применяет обработчик к окну и обрабатывает событие, когда оно всплывает из выбора. Из-за этого элемент select не должен существовать до его применения. Это полезно, когда вы создаете элементы динамически, но хотите, чтобы существующие обработчики применялись к ним при их создании. В результате это устраняет проблему с элементами, не существовавшими до полной загрузки страницы.
Однако , это хорошая практика, чтобы в любом случае обернуть ваш код в «готовый» блок, чтобы избежать нежелательных побочных эффектов.