2017-03-09 13 views
0

私のcapital_cityオートコンプリートフィールドにcountry_nameに関連するオプションだけを表示したい。したがって、2番目のオプションフィールドで国を選択すると、選択した国に関連する都市のみが表示されます。ありがとうございました。ここで2つの依存ドロップダウン(オートコンプリート)メニューを作成するには?

は私のview.phpである:ここでは

<div class="filtering"> 
<form class="searchbox_1"> 
Country Name: <input type="text" class="search_1" name="country_name" id="country_name" /> 
City Name: <input type="text" class="search_1" name="capital_city" id="capital_city" /> 
Date from <input class="search_1" type="date" name="from_date" id="from_date"/> 
Date to <input class="search_1" type="date" value = "<?php echo date('Y-m-d')?>" name="to_date" id="to_date"/> 
<center><button class="submit_1" type="submit" id="LoadRecordsButton">Search</button> 
    <input class ="submit_1" type="reset" value="Clear fields!"></center> 

</form> 
</div> 
<div id="countryTable"></div> 
<script type="text/javascript"> 

$(document).ready(function() { 

//Prepare jTable 
$('#countryTable').jtable({ 
title: 'Country\'s', 
     paging: true, 
     pageSize: 10, 
     sorting: true, 
     defaultSorting: 'country_name ASC', 
     selecting: true, 
     multiselect: true, 
     selectingCheckboxes: true, 
     selectOnRowClick: true, 
     actions: { 
       listAction: 'get_country', 
       createAction: 'create_country', 
       updateAction: 'update_country', 
       deleteAction: 'delete_country' 
     }, 
     fields: { 
      country_id: { 
      key: true, 
       list: false 
      }, 
       country_name: { 
       title: 'Country Name', 
       width: '11%' 
       }, 
       country_code: { 
       title: 'Country Code', 
       width: '11%' 
       }, 
       surface_area: { 
       title: 'Surface Area (m<sup>2</sup>)', 
       width: '13%' 
       }, 
       continent_name: { 
       title: 'Continent Name' 
       }, 
       continent: { 
       title: 'Continent Code', 
       width: '12%' 
       }, 
       population: { 
       title: 'Population' 
       }, 
       capital_city: { 
       title: 'Capital City' 
       }, 
       record_date: { 
       title: 'Record Date', 
         type: 'date', 
         displayFormat: 'mm/dd/yy', 
         create: false, 
         edit: false, 
         sorting: false 
       } 
     }, 


     $('#country_name').autocomplete({ 
      source: 'list_country', 
      minLength: 0, 
      scroll: true, 
      autoFocus: true 
     }).focus(function() { 
     $(this).autocomplete("search", "") 
       .autocomplete("widget") 
       .addClass("country_field"); 
    }); 

    $('#capital_city').autocomplete({ 
     source: 'list_city', 
     minLength: 0, 
     scroll: true, 
     autoFocus: true 
    }).focus(function() { 
     $(this).autocomplete("search", "") 
       .autocomplete("widget") 
       .addClass("country_field"); 
    }); 

$('#LoadRecordsButton').click(function (e) { 
    e.preventDefault(); 
    $('#countryTable').jtable('load', { 
     country_name: $('#country_name').val(), 
     capital_city: $('#capital_city').val(), 
     from_date: $('#from_date').val(), 
     to_date: $('#to_date').val() 
    }); 

}); 

$('#LoadRecordsButton').click(); 

}); 

</script> 
</div> 

は私model.phpです:ここでは

public function get_country_name() { 

$searchTerm = filter_input(INPUT_GET, 'term'); 

    $query = $this->db->query("SELECT DISTINCT country_name FROM country " 
    . "WHERE deleted=0 AND country_name LIKE '" . $searchTerm . "%' ORDER BY country_name ASC"); 

$row = array(); 

foreach ($query->result_array() as $ro) { 
$row[] = $ro['country_name']; 
} 
    echo json_encode($row); 
} 
public function get_city_name() { 

$searchTerm = filter_input(INPUT_GET, 'term'); 

$query = $this->db->query("SELECT DISTINCT capital_city FROM country " 
. "WHERE deleted=0 AND capital_city LIKE '" . $searchTerm . "%' ORDER BY  capital_city ASC"); 

$row = array(); 

foreach ($query->result_array() as $ro) { 
$row[] = $ro['capital_city']; 
} 
echo json_encode($row); 
} 

は私controller.phpです:

public function list_country(){ 

$this->load->model('Country_model'); 
$this->Country_model->get_country_name(); 

}  

public function list_city(){ 

$this->load->model('Country_model'); 
$this->Country_model->get_city_name(); 

} 

答えて

0

あなたが使用する必要がありますcountry_nameのオートコンプリートのオートコンプリートのonselectオプション。

国リスト内のアイテムを選択すると、countryidを別の関数に渡して、選択した国IDを渡すように市のオートコンプリートソースを更新します。 APIでGETを使用し、国IDをモデルに渡して、その国IDに属する都市を取得できます。 jqueryのバージョンによって構文が少し変わる場合があります。あなたの答え@ElaBuwaため

$('#country_name').autocomplete({ 
      source: 'list_country', 
      minLength: 0, 
      scroll: true, 
      autoFocus: true 
     }).focus(function() { 
     $(this).autocomplete("search", "") 
       .autocomplete("widget") 
       .addClass("country_field"); 
    })select: function(event, ui) { 
     changecitysource(ui.item.country_id); // change the country id according to your source 
    }; 

    function changecitysource(countryid){ 
     var newsourceurl = "http://newurl.org/getcities/countryid"; 
     $("#capital_city").autocomplete('option', 'source', newsourceurl); 
    } 

Check this fiddle

+0

感謝。 "Uncaught Error:初期化の前にオートコンプリートのメソッドを呼び出すことができず、メソッド 'option'を呼び出そうとしました。" –

+0

こんにちは、あなたはあなたの関数を持っていることを確認できますか? document.ready function please –

+0

私はあなたのために手伝いをしました。これを使用してコードを更新します。 https://jsfiddle.net/84zwxtrk/ –

関連する問題