我想生成一些用于编辑的数据,通过用户在下拉菜单中做出的选择进行过滤,但我不想让事情复杂化。
我已经让我的项目查询数据库中的“树”列表,并使用树名填充一个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);
MODEL:
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和tree_description。
答案 0 :(得分:4)
如果你制作一个'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(),这样你也可以执行一个get_tree($ id),它在controller_name#show方法中返回一个树,你可以返回一个没有布局的模板,附加。
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){...