Bootstrap-3-Typeahead afterSelect获取ID

时间:2016-02-15 06:04:56

标签: twitter-bootstrap bootstrap-typeahead

我正在使用Bootstrap-3-Typeahead here从mysql自动完成。 我需要在选择后使用类似

的内容从选定的item_name获取item_code
$('#item_code').val(this.item_code);

遗憾的是没有工作。

我的Json输出:

[{ “ITEM_CODE”: “1”, “ITEM_NAME”: “A”},{ “ITEM_CODE”: “2”, “ITEM_NAME”: “B”}]

这是我的代码,请指教

$('input.item_name').typeahead({
                minLength: 3,
                source: function (query, process) {
                    $.ajax({
                        url: 'function/load-item.php',
                        type: 'POST',
                        dataType: 'JSON',
                        data: 'query=' + query,
                        success: function(data) {
                            var newData = [];
                            $.each(data, function(){
                                newData.push(this.item_name);
                                });
                            return process(newData);
                            }
                    });
                },
                afterSelect: function(){
                    $('#item_code').val( ... ... ... ... );
                }
            });

我的PHP代码

<?php
session_start();
include ('../include/connect.php');

$query = 'SELECT item_code,item_name FROM master_item';
if(isset($_POST['query'])){
$query .= ' WHERE item_name LIKE "%'.$_POST['query'].'%"';
}

$return = array();
if($result = $conn->query($query)){
    // fetch array
    while ($row=mysqli_fetch_assoc($result))
    {
        $return[] = $row;
    }

    // free result set
    $result->close();
    // close connection
    $conn->close();

    $json = json_encode($return);
    print_r($json);
}

&GT;

3 个答案:

答案 0 :(得分:5)

尝试使用typeahead:selected代替afterSelect,它会返回您可以获得所需值的整个对象,即.item_code。我创建了这个fiddle,你可以看到那里的工作示例。

$('.typeahead').on('typeahead:selected', function (e, datum) {
    console.log(datum);
    $('#item_code').val(datum.item_code);
});

答案 1 :(得分:4)

这是为了在不久的将来可能会遇到同样问题的人的利益。 以下是使用JQuery和bootstrap-3-typeahead.js or bootstrap-3-typeahead.min.js获得相同功能的另一种简单方法

实施例

&#13;
&#13;
var url = "codePath/searchCode.php";
$('.typeahead').typeahead({
    source: function (query, process) {
      return $.get(url, { query: query }, function (data) {
        console.log(data)
	    return process(data);
	  });
    },
    //this triggers after a value has been selected on the control
    afterSelect: function (data) {
      //print the id to developer tool's console
      console.log(data.id);
    }
});
&#13;
&#13;
&#13;

答案 2 :(得分:1)

回复旧线程,你的代码似乎很好,你只是错过了afterSelect回调的参数

$('input.item_name').typeahead({
            minLength: 3,
            source: function (query, process) {
                $.ajax({
                    url: 'function/load-item.php',
                    type: 'POST',
                    dataType: 'JSON',
                    data: 'query=' + query,
                    success: function(data) {
                        var newData = [];
                        $.each(data, function(){
                            newData.push(this.item_name);
                            });
                        return process(newData);
                        }
                });
            },
            afterSelect: function(args){
                $('#item_code').val(args.item_code );
            }
        });