2017-03-06 4 views
1

私は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(); 

} 

私が探してきました解決策を見つけるために数日間。私を助けてください。 :-)その後

$('#country_name').change({ 
    /*some code here*/ 
}); 

、このように、中にあなた$('#capital_city').autocomplete({})を転送:

答えて

0

このような何かを追加してみてください

$('#country_name').change({ 
    var country = $(this).val(); 

    $('#capital_city').autocomplete({ 
      source: 'list_city_' + country, /*see explanation below*/ 
      minLength: 0, 
      scroll: true, 
      autoFocus: true 
     }).focus(function() { 
      $(this).autocomplete("search", "") 
        .autocomplete("widget") 
        .addClass("country_field"); 
     }); 

}); 

国名が変更されるたびに、自動補完のための都市の源それに応じて変化する。

これを機能させるには、モデルからフェッチするときに都市リストを国別にグループ化します。

私はこのコードをテストすることができませんでした。あなたのためにいくつかの調整が必要な場合がありますが、あなたの問題を解決するためのアイデアがあることを願っています。がんばろう!

関連する問題