我正在使用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;
答案 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获得相同功能的另一种简单方法:
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;
答案 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 );
}
});