所以我正在使用这个jQuery插件:
jSuggest
哪个基于此插件:autoSuggest
这是jsFiddle与jSuggest的(工作)演示:demo
这是我用来在我的页面上实例化插件的代码:
<form id="add" action="components/AddItem.php" method="post" enctype="multipart/form-data" class="center clear">
<fieldset>
<legend>Basic Information</legend>
<label for="name">Name</label>
<br />
<input type="text" name="name" id="name"/>
...[snip]...
</form>
$( '#name' ).jSuggest({
source: "components/suggItem.php",
selectedItemProp: "name",
seekVal: "name",
selectionLimit: 1,
uniqID: "item",
keyDelay: 100,
newText: "You must click outside the text box to add a new item."
});
当我在文本框中输入“ch”时,这是从"components/suggItem.php"
返回的字符串:
[ {"value":"1","name":"Cheeseburger"},{"value":"3","name":"Fish Sandwich"} ]
(那是Content-type: application/json
,我是从FireBug获得的)
但是,我 唯一能够进入下拉菜单的是"No Results Found"
。任何人都可以在我的代码中找到错误吗?
我也尝试过:
$( '#name' ).jSuggest({
source: "components/suggItem.php",
seekVal: "name",
});
以及"value"
和"name"
的各种组合。
我无法弄清楚为什么这不起作用。有什么帮助吗?
答案 0 :(得分:3)
该插件可能有其优点,但作者似乎正在遭受对AJAX工作方式的重大误解。这段代码在这里:
// If the data is a URL, retrieve the results from it. Else, the data is an object, retrieve the results directly from the source.
if (dType === 'string'){
// Set up the limit of the query.
var limit = qLimit ? "&limit="+encodeURIComponent(qLimit) : '';
// Build the query and retrieve the response in JSON format.
$.getJSON(theData+"?"+opts.queryParam+"="+encodeURIComponent(string)+limit+opts.extraParams, function(rData){ theData = rData; });
}
// Call the custom retrieveComplete function.
theData = opts.retrieveComplete.call(this, theData);
对我来说假设“getJSON”调用将同步调用函数参数,这样变量“theData”将在执行最后一行(显示)之前更新。然而,这并不是真的,“theData”是驱动整个自动完成机制的关键对象。
原始代码(对于“autoSuggest”插件,似乎是“jSuggest”的祖先)在该代码周围看起来截然不同,并且它正确地推迟了从ajax调用返回到处理程序例程的JSON数据的解释
答案 1 :(得分:0)
$( '#name' ).jSuggest({source: "components/suggItem.php",
selectedItemProp: "name",
seekVal: "name"
});
所有这三个属性都是必需的。通过直接将源属性传递给数组而不是url来验证它的工作原理,一旦这样做,请尝试使用url。