Здесь я использую материал design lite для создания проекта, следуя тому, что я сделал свой код, как этот, но в соответствующем поле ничего не отображается.
Вот мой код, пожалуйста, посмотрите
<script>
$('#type').change(function(){
var type=$('#type').val();
alert(type);
var url='<?php echo base_url(); ?>admin/vehicle/ajax_vehicle';
alert(url);
$.post(url, {type:type}, function(data)
{
alert();
componentHandler.upgradeDom();
$('#vehicle').html(data);
});
});
</script>
Вот мой контроллер
public function ajax_vehicle()
{
$data['vehicle']=$this->Vehicle_model->view_available_vehicles($_POST['type']);
//var_dump($data['vehicle']);
$this->load->view('admin/vehicle/ajax_vehicle',$data);
}
Вот моя страница просмотра
<div class="input-field col s12">
<select required name="vehicle_id" id="vehicle">
<option value="" selected>Select</option></select>
<label>Select Vehicle</label>
</div>
var type=$('#type').val();
получает значение.
Когда я утешаю его, я получаю такой результат
<select required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>
Это мой ajax_vehicle, необходимо отображать его содержимое после выбора выбранного типа.
<select required name="vehicle_id">
<option value="">Select</option>
<?php if(empty($assign_vehicle_info)){
if (!empty($vehicle)) {
foreach ($vehicle as $veh) {?>
<option value="<?= $veh->id ?>"<?php if (!empty($assign_vehicle_info)) { echo $assign_vehicle_info->vehicle_id == $veh->id ? 'selected' : ''; } ?>><?= $veh->name ?></option>
<?php }}}?>
</select>
на самом деле не знаю, какие дополнительные вещи должны быть добавлены к этому для работы.
если data
содержит
<select required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>
как вы заявляете, то результат $('#vehicle').html(data);
будет
<select required name="vehicle_id" id="vehicle">
<select required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>
</select>
который, как вы можете видеть, является бессмысленным и недействительным HTML. html()
функция заменяет внутренний HTML-код выбранного элемента, а не самого элемента.
У вас есть два варианта:
1) Измените выходные данные сервера (т.е. ajax_vehicle
вид) так что просто возвращает <option>
элементы — нет необходимости возвращать внешнюю часть <select>
также. Поэтому в результате data
возвращаемый из вызова ajax должен содержать только (например):
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
Тогда вы можете продолжать использовать $('#vehicle').html(data);
как прежде.
ИЛИ ЖЕ
2) Использование replaceWith
т.е. $("#vehicle").replaceWith(data);
вместо .html()
, Но в этом случае вам все равно нужно изменить вывод вашего сервера так, чтобы <select>
включает в себя id="vehicle"
разметка, иначе этот код не будет работать во второй раз, так как элемент с именем «vehicle» больше не будет существовать. Также имейте в виду, что если у вас есть какие-либо обработчики событий и т. Д. Для элемента «vehicle», их также нужно будет создать заново, поскольку вы заменили весь элемент. Увидеть http://api.jquery.com/replacewith/
На мой взгляд, вариант 1 — лучший выбор.
Других решений пока нет …