2011-06-01 35 views
3

我想要生成一些數據進行編輯,通過用戶在下拉菜單中進行選擇進行過濾,但我不想讓事情複雜化。Code Igniter php - 基於下拉選擇與jQuery返回(ajax?)數據

我已經有我的項目查詢數據庫中的「樹」列表,並填充樹名稱的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(); 
} 

VIEW:

<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。

回答

4

如果您返回的數據裸模板「顯示」控制方法(即:不完整的佈局),你可以做這樣的事情:

$('#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){...