У меня есть форма, которая регистрирует «свойство» для выбранного «продукта».
При наборе названия продукта — он получает его из базы данных, используя контроллер, отправляет его в модель и возвращает массив переменных.
Поскольку jQuery ‘autocomplete’ работает с jsons, то он отображает переменные как jsons.
Я пытаюсь получить идентификатор, используя скрытую форму, но безуспешно, как лучше всего это сделать?
Модель:
public function search_prod_name($prod_name){
$this->db->query(" SELECT prod_name, prod_id FROM prods WHERE prod_name LIKE $prod_name");
return $this->db->get('prods')->result();
}
контроллер:
// Autocomplete prod name from DB.
public function search_prod_name(){
if ( isset($_GET['prod_name']) ){
$prod_name = $_GET['prod_name'];
$result = $this->kas_model->search_prod_name();
if (count($result) > 0){
foreach ($result as $prod) {
$arr_name[] = $prod->name;
$arr_id[] = $prod->id;
}
echo json_encode($arr_name);
echo json_encode($arr_id);
}
}
}
заголовок (jQuery):
<script type="text/javascript">
$(document).ready(function(){
$('#prod_name').autocomplete({
source: "<?php echo site_url('kas/search_prod_name'); ?>"});
});
</script>
Форма:
<?php
// Give a class and ID to the 'prop_prod' autofill
$attributes = array('class' => 'prod_name', 'id' => 'prod_name', 'name' => 'prod_name');
$attributes2 = array('name' => 'prop_prod' );
?>
<div class="content kas_reg prop_reg">
<h1>Register a new property:</h1>
<?php
echo form_open('kas/add_property');
echo form_input('prop_word', 'property');
echo form_input('prod_name', 'prod Name', $attributes);
echo form_hidden($attributes2);
?><select id="country" name="prop_country">
<!-- options.. -->
</select><?php
echo form_submit('submit', 'Submit a New property');
echo form_close();
?></div>
В настоящее время я получаю имена из базы данных, но я хочу получить идентификатор этого имени. поэтому при отправке — я отправляю ID, а не имя.
РЕДАКТИРОВАТЬ:
У меня есть эти файлы, и я точно знаю, что их зовет начальник.
может это проблема с кешем может быть?
Вы должны установить значение и индекс метки в массиве, найти определение на странице автозаполнения API.
контроллер:
// Autocomplete prod name from DB.
public function search_prod_name(){
$data = array();
$prod_name = $this->input->get('term');
if ( !empty($prod_name) ){
$result = $this->kas_model->search_prod_name($prod_name);
if (count($result) > 0){
foreach ($result as $prod) {
$aRow = array();
$aRow['label'] = $prod->name;
$aRow['value'] = $prod->name;
$aRow['id'] = $prod->id;
$data[] = $aRow;
}
}
}
echo json_encode($data);
}
Код модели
public function search_prod_name($prod_name){
$result = $this->db->query("SELECT prod_name, prod_id FROM prods WHERE prod_name LIKE '%$prod_name%'");
return $result->result();
}
JavaScript:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#place_name').autocomplete({
//minLength:2,
source:function(request, response) {
var sUrl = "<?php echo site_url('kas/search_prod_name'); ?>";
$.getJSON(sUrl, request, function(result) {
response(result);
});
},
select:function(event, ui) {
alert('Your selected id is '+ui.item.id);
}
});
});
</script>
Других решений пока нет …