#php #jquery #ajax #codeigniter
Вопрос:
В настоящее время у меня есть 2 поля выбора под названием Страна и город. Теперь я сделал так, чтобы данные по городу заполнялись в соответствии со значением, выбранным в стране с помощью AJAX. Для этого я использовал следующий код:
edit.php:
lt;select name="country" onchange="getcities($(this).val())" requiredgt; lt;option value="lt;?php echo set_value('country'); ?gt;"gt;Select Countrylt;/optiongt; lt;?php if($countries) foreach($countries as $country): ?gt; lt;option value="lt;?php echo $country['id']; ?gt;" lt;?php echo ($listing[0]['country'] == $country['id'])?'selected="selected"':''?gt;gt;lt;?php echo $country['name']; ?gt;lt;/optiongt; lt;?php endforeach; ?gt; lt;/selectgt; lt;label class="control-labels "gt;Citylt;/labelgt; lt;div id="emiratewrap"gt; lt;select name="emirate" id="emirate"gt; lt;option value=""gt;Select Citylt;/optiongt; lt;/selectgt;
АЯКС
$(document).ready(function () { getcities($('#country').val()); }); function getcities(obj){ console.log(obj); var dataString = new Object(); dataString.emirate = 'lt;?php echo $property-gt;emirate ?gt;'; $.ajax({ type: "get", dataType:"json", url: "lt;?php echo site_url('listings/ajaxgetcitiesedit'); ?gt;/" obj, data: dataString, success: function(e) { $('#emiratewrap').html(e.result); $bb = "lt;?php echo $property-gt;status; ?gt;"; if($bb=="Y") {$("#emiratewrap select").addClass("disabled"); } } }); }
Контроллер:
function ajaxgetcitiesedit($country=''){ $emirate = $this-gt;input-gt;get('emirate'); if(!$country) return false; $cities = $this-gt;listings_model-gt;get_activepair_cities(array('country_id'=gt;$country),'*','name asc'); $html = 'lt;select name="emirate" id="emirate" class="form-control select2 required" onchange="oemirate(this);"gt;'; $html .= ($emirate lt;1)? 'lt;option value=""gt;Select Emiratelt;/optiongt;':''; foreach($cities as $city): $html .= 'lt;option value="'.$city['id'].'" '.($city['id'] == $emirate ? 'selected="selected"' : '').'gt;'.$city['name'].'lt;/optiongt;'; endforeach; $html .= 'lt;option value="Other"gt;Otherlt;/optiongt; lt;/selectgt;lt;input type="text" id="other_emirate" name="other_emirate" class="form-control" style="display: none;" /gt;'; echo json_encode(array('result'=gt;$html)); }
Сейчас я работаю над страницей редактирования, где изначально должно быть показано, какое значение пользователь выбрал при добавлении записи. На данный момент функциональность второго выбора работает нормально, как и предполагалось, поскольку он изменяет свои параметры при изменении данных 1-го выбора, а также выдает правильное значение в базе данных при нажатии кнопки обновить.
Теперь единственная проблема, с которой я сталкиваюсь, заключается в том, что изначально при загрузке на страницу она ничего не показывает во втором поле выбора, даже если для нее есть значение в базе данных. Я выполнил console.log(obj);
getcities(obj)
вход, и изначально он возвращался неопределенным, и каждый раз, когда я меняю страну, он дает значение в моем журнале.
Комментарии:
1. Измените
lt;select name="country"
lt;select id="country" name="country"
, пожалуйста