我无法显示从jquery的自动完成JSON的变量
问题描述:
- 名称不中自动完成
- 的下拉框中显示我怎么可以指定每个变量到一个特定的文本框,当我得到的回应
<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
</head>
<body style="font-size:62.5%;">
<input type="text" id="name" />
<input type="text" id="id" />
<input type="text" id="tel" />
<script> $("#name").autocomplete({ source: "php/company.php" }); </script>
</body>
</html>
PHP:
$term = strtolower($_GET["term"]);
$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME";
$result = mysql_query($sql, DBCONN) or die ("<br>MySQL Error: " . mysql_error(DBCONN));
while($row = mysql_fetch_array($result))
{
$row_set = array(
"label" => $row['NAME'],
"id" => $row['ID'],
"tell" => $row['TEL']);
}
echo json_encode($row_set);
萤火JSON响应:
{"label":"MacDonald","id":"1","tel":"1-800-4444"}
答
RTFM:
从本地数据的数据,URL或回调可以有两种 变种:
- 字符串数组:
- 的数组具有标签和值属性的对象
你的json响应不是真的是一个数组,是吗?您也只能更新一个字段的自动填充。
$("#name").autocomplete({ source: function callback(term, autocomplete) {
$.getJSON("php/company.php?term="+term, function(data) {
// do the magic here: extract an option array from your data, e.g.
var arrayOfStrings = data.names;
autocomplete(arrayOfStrings);
});
});
我不明白你想用其他的数据做什么,寻找您将无法自动完成电话号码输入字段,将您具体的名字你的数据库是什么时候?
编辑:你的问题是,你的JSON响应目前并输出的最后一个匹配的名称为对象。如果您将返回一个数组,则自动完成功能将非常有用。修正了几项错误:
$term = mysql_real_escape_string(strtolower($_GET["term"]));
$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME";
$result = mysql_query($sql, DBCONN) or die ("{\"error\":\"" . mysql_error(DBCONN) . "\"}");
$output = array();
while($row = mysql_fetch_array($result)) {
$row_set = array(
"label" => $row['NAME'],
"value" => $row['NAME'],
"id" => $row['ID'],
"tell" => $row['TEL']);
$output[] = $row_set;
}
echo json_encode($output);
如果你使其与调整Ajax调用(见上文)的自定义回调函数,你可以现在试图提取阵列之前检查data.error
。
现在你可能想玩自定义项目显示,焦点和选择事件。例如与
-
.data("autocomplete")._renderItem
(见链接范例源)可以显示自定义列表项 - 上
.autocomplete({focus:...})
你可以通过设置#ID和#tel其相应的价值和 - 上
.autocomplete({select:...})
你可能会冻结# ID和#tel(禁用输入)
答
”) \t \t \t。数据(“项。自动完成”,项目) \t \t \t .append( “” + item.label + “
” + item.desc + “”) \t \t \t。 appendTo(ul); \t};' – nouky 2012-03-22 12:27:25
默认情况下,插件期望字符串,而不是对象的数组。您需要使用custom data rendering。
$("#name").autocomplete({
....
focus: function(event, ui) {
$("#name").val(ui.item.label);
return false;
}
....
})
.data("autocomplete")._renderItem = function(ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "<br>" + item.id + "</a>")
.appendTo(ul);
};
+0
我改变了我的代码,但仍然没有任何反应,也许错误是在我的PHP响应? '$( “输入#自动完成”) \t .autocomplete({ \t \t源: “PHP/company.php”, \t \t的minLength:0, \t \t焦点:功能(事件,UI){ \t \t \t $( “#autocomplete”).VAL(ui.item.label); \t \t \t返回FALSE; \t \t},\t \t \t \t \t select:function(event,ui){(“#autocomplete”).val(ui.item.label); \t \t \t return false; \t \t \t} \t \t }) \t。数据( “自动填充”)._ renderItem =函数(UL,项目){ \t \t返回$( “
” + item.desc + “”) \t \t \t。 appendTo(ul); \t};' – nouky 2012-03-22 12:27:25
当我得到公司名称时,我想要将电话号码也显示在电话的文本框中 – nouky 2012-03-22 12:08:00
自动完成的感觉是获取不止一个(公司)名称 - 您想要什么处理多个ID /电话号码? – Bergi 2012-03-22 13:22:08
我想将公司的电话和身份证传递给其他人。 Tnxx为你的答案是有帮助的! – nouky 2012-03-22 18:55:07