Не реагирует на изменение select
Здравствуйте, возникла проблема (
Делаю пошаговое заполнение местоположения, те сначала страна потом регион потом город. Так вот при выборе страны все срабатывает и вставляется список регионов, а при выборе региона реакции 0, код аналогичный, что происходит не имею понятия ( Помогите Код Jquery
$(document).ready(function() {
/* SMART COUNTRY, REGION, CITY */
$("#countries select").change(function() {
var country_id = $(this).val();
$.post("http://localhost:8888/carzap/index.php/location/region", { country_id: country_id },
function(regions) {
$("#regions").html("<label>В каком регионе?</label>" + regions)
});
});
$("#regions select").change(function() {
alert('region_id');
var region_id = $(this).val();
$.post("http://localhost:8888/carzap/index.php/location/city", { region_id: region_id },
function(cities) {
$("#city").html("<label>В каком городе?</label>" + cities)
});
});
});
Код HTML <section id="countries"> <label>В какой вы стране?</label> <?php echo $countries;?> </section> <section id="regions"> <label>В каком регионе?</label> <select disabled="disabled"> <option>Регион</option> </select> </section> <section id="city"> <label>В каком городе?</label> <select disabled="disabled"> <option>Город</option> </select> </section> И в select id ставил, та же реакция реакция только на страну ( |
Я вот думаю, может когда я заменяю HTML то связи с js пропадают?
|
волею судьбы недавно тоже этим вопросом занимался по мануалу
$('#country_id').change(function () {
var country_id = $(this).val();
if (country_id == '0' ) {
$('#region_id').html('');
$('#region_id').attr('disabled', true);
return(false);
}
if ( country_id == 'NULL' || $('#city_id').val() >'0') {
$('#city_id').html('');
$('#city_id').attr('disabled', true).html('<option>нет городов</option>');
}
$('#region_id').attr('disabled', true);
$('#label_region').hide();
$('#region_id').html('<option value="0" >нет регионов</option>');
var url = '<?=base_url()?>arka/view/country/'+country_id;
$.post(
url,
function (result) {
if (result.type == 'error') {
alert('error');
return(false);
}
else {
var options = '';
$(result.regions).each(function() {
options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
});
$('#region_id').html(options);
$("#region_id").attr('disabled', false);
}
},
"json"
);
});
$('#region_id').change(function () {
var region_id = $(this).val();
if (region_id == '0' ) {
$('#city_id').html('');
$('#city_id').attr('disabled', true);
return(false);
}
var url = '<?=base_url()?>arka/view/region/'+region_id;
$.post(
url,
function (result) {
if (result.type == 'error') {
alert('error');
return(false);
}
else {
var options = '';
$(result.city).each(function() {
options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
});
$('#city_id').html(options);
$("#city_id").attr('disabled', false);
}
},
"json"
);
});
Это у меня работает на тестовом.. После того как я это сделал, принялся делать другие подобные запросы.. И вы знаете что после этого думаю? - подход с двумя change функциями как то не очень().. Хочется сделать все в одну change функцию, - может я и не прав, но подумалось так.. |
Может быть вы и правы с одной .change функцией, но а с другой стороны, тогда внутри нее нужно ставить условия которые бы распознавали что именно change ) и в зависимости от этого что-то делать, на мой взгляд одно и то же, только читаемость будет хуже )
И вот я смотрю на ваш код и увидел <?=base_url()?> почему-то мой js ругается на это ( может потому что localhost, но это не логично, пришлось ставить полный путь, может подскажете что-то? Вот такую ошибку в консоли пишет: %3C?=base_url()?%3E/location/region Failed to load resource: the server responded with a status of 404 (Not Found) |
Если вы хотите использовать это, тогда нужно разобраться с урлами и html-ом и будет работать. А "<? base_url() ?>" это php , уберите и поставьте туда ваш адрес сайта. Шикарный вид))
- несколько известных мне путей: 1. Передать значение селекта в урле (в моем примере это так), т.е обзываете и пихаете в урл ваш val() , а на php доберетесь через GET. 2. Передать постом - в таком случае урл это адрес вашего php контроллера, просто передаете нужный val() как в вашем коде это делаеться и все, а на стороне php через POST смотрите. замечания: - если вы используете традиционный GET тогда и запрос должен иметь приемлемый вид. - второй метод все же как по мне удобней |
| Часовой пояс GMT +3, время: 16:30. |