我尝试使用Codeigniter创建一个动态下拉列表,但在获取下一个下拉列表中的值时遇到了问题。当我在第一个下拉列表中选择一个选项时,第二个下拉列表没有填充:
我也不熟悉使用 AJAX ,我只写脚本的基础上,我搜索,所以请教我做什么,使动态下拉工作。
这是我的模型:
public function category()
{
$this->db->order_by("category", "ASC");
$query = $this->db->get('categories');
return $query->result();
}
function get_subcategory($parent_id)
{
$this->db->where('parent_id', $parent_id);
$this->db->order_by('sub_category', 'ASC');
$query = $this->db->get('sub_categories');
$output = '<option value="">Select Sub-Category</option>';
foreach ($query->result() as $row) {
$output .= '<option value="' . $row['id'] . '">' . $row['sub_category'] . '</option>';
}
return $output;
}
我的控制器:
public function category()
{
$data['title'] = 'List of Category';
$this->load->view('../admin/template/admin_header');
$this->load->view('../admin/template/admin_topnav');
$this->load->view('../admin/template/admin_sidebar');
$this->load->view('../admin/category/category', $data);
$this->load->view('../admin/template/admin_footer');
}
function get_subcategory()
{
if ($this->input->post('parent_id')) {
echo $this->Admin_model->get_subcategory($this->input->post('parent_id'));
}
}
查看方式:
<div class="form-group">
<label for="" class="control-label">Category</label>
<select name="category" id="category" class="custom-select select2" required>
<option value="">- Select Category -</option>
<?php
foreach ($category as $row) {
echo '<option value="' . $row->id. '">' . $row->category . '</option>';
}
?>
</select>
</div>
<div class="form-group">
<label for="" class="control-label">Sub Category</label>
<select name="sub_category" id="sub_category_id" class="custom-select select2" required>
<option value="">- Select Sub Category -</option>
</select>
</div>
和脚本:
$(document).ready(function() {
$('#category').change(function() {
var parent_id = $('#category').val();
if (parent_id != '') {
$.ajax({
url: "<?php echo base_url(); ?>admin/get_subcategory",
method: "POST",
data: {parent_id:parent_id},
success: function(data) {
$('#sub_category_id').html(data);
}
});
} else {
$('#sub_category_id').html('<option value="">Select Sub Category</option>');
}
});
});
2条答案
按热度按时间kjthegm61#
你的问题没有提到它,但是你的CSS提示你的
select
实际上是在使用Select2。当你初始化select
作为Select 2时,它会复制初始的HTML,并添加样式和JS到它,你可以看到和与它交互。原始的HTML不再可见或使用。因此,如果您稍后修改原始HTML,它将不会对您已经生成的Select 2产生任何影响,并且可以在页面上看到与的交互。
一种解决方案是在修改Select 2后重新初始化它。
更新
我已经添加了一个工作代码段,用一些硬编码的HTML来模拟 AJAX 返回的内容。单击运行来尝试。
第一个
注意事项:
9q78igpj2#
在你的成功回答中,写下这句话,并删除下面的“else”。
从控制器中获取数组中 AJAX 响应,然后像这样通过javascript运行它。
id是来自数据库的id,sub_category是来自数据库的sub_category
使用 AJAX 响应数组。