我想生成一些数据进行编辑,根据用户在下拉菜单中的选择进行过滤,但我不想让事情复杂化。
我已经让我的项目在数据库中查询"树"列表,并用树名填充一个dropbox,将tree_id指定为其值。
我所想做的就是,当用户在下拉列表中做出选择时,让JQuery只返回该ID的相关数据(描述等)的列表。
最简单的方法是什么?我甚至需要发出AJAX请求吗?这是我的代码:
控制器:
$this->load->model('Model_form','', TRUE);
$data['trees'] = $this->Model_form->get_tree();
$this->load->view('view_form_tree', $data);
型号:
function get_tree(){
$query = $this->db->query('SELECT * FROM trees');
return $query->result();
}
视图:
<h1>Edit Tree</h1>
<select id="f_treeindex" name="f_treeindex" class="dd_black">
<option value=""></option>
<?php
foreach($trees as $tree){
echo '<option value="' . $tree->id . '">' . $tree->tree_name . '</option>';
}
?>
</select>
<script type="text/javascript">
$(document).ready(function() {
$('#f_treeindex').change(function(){
var tree_id = $('#f_treeindex').val();
if (tree_id != ""){
//DO WHATEVER I NEED TO DO TO CALL THE INFORMATION FOR THE TREE WHOSE ID MATCHES THAT SELECTED IN THE DROPDOWN
}//end if
}); //end change
}); //end docready
</script>
请注意,模型中的SELECT*语句将返回tree_id、tree_name和treedescription。
如果您制作一个"show"控制器方法,该方法返回一个带有数据的裸模板(即:不具有完整布局),则可以执行以下操作:
$('#f_treeindex').change(function(){
var tree_id = $('#f_treeindex').val();
if (tree_id != ""){
$.get('/controller_name/show', {id:tree_id}, function(data){
$(this).parents('div').append(data);
})
}//end if
});
将<select>
封装在<div>
中,这样您的jquery就可以将生成的html附加到.中
此外,我会将get_tree()重命名为get_trees(),这样你也可以在controller_name#show方法中创建一个get_tree$id,返回一个单独的树,你可以在没有布局的情况下返回一个模板。
function show() {
$this->load->model('Model_form','', TRUE);
$data['tree'] = $this->Model_form->get_tree($this->params['id']);
$this->load->view('single_tree_view', $data);
}
此外,不能100%确定CI是如何设置的,因此您的$.get
行可能需要是
$.get('/controller_name/show/'+tree_id, function(data){...