$("#username").autocomplete({
target: $('#usersss'),
source: function() {
var db = decoara.webdb.db;
db.transaction(function(tx) {
tx.executeSql("SELECT codigo as value, fantasia as label, tabela FROM clientes WHERE fantasia LIKE '%"+$("#username").val()+"%' LIMIT 4",null,
function (tx, results) {
jsonClientes = '[';
console.log('Rows:'+results.rows.length);
for (i=0; i<results.rows.length; i++) {
row = results.rows.item(i);
jsonClientes += '{"value":'+row['value']+',"label":"'+row['label']+'"}';
if (i!=results.rows.length-1)
jsonClientes += ',';
}
jsonClientes += ']';
console.log(jsonClientes);
return $.parseJSON(jsonClientes);
},function (tx, e) {
console.log('error: ' + e.message);
}
);
});
},
link: 'xxx.html?ops=',
minLength: 1
});
source的函数返回这个json代码:
[{"value":27,"label":"NARDIM"},{"value":38,"label":"MORO"},{"value":39,"label":"MH"},{"value":40,"label":"IRMAO SAPIENZA"}]
但是列表视图似乎没有出现。当我使用相同的jSON数据将源更改为var时,它可以正常工作:
var autocompleteData = $.parseJSON('[{"value":27,"label":"NARDIM"},{"value":38,"label":"MORO"},{"value":39,"label":"MH"},{"value":40,"label":"IRMAO SAPIENZA"}]');
source: autocompleteData,
为什么?
答案 0 :(得分:0)
尝试将jsonClientes声明为数组,然后使用.push将值存储在其中。 即
var jsonClientes = [];
console.log('Rows:'+results.rows.length);
for (i=0; i<results.rows.length; i++) {
row = results.rows.item(i);
jsonClientes.push ('{"value:"'+row.value+'",label:"'+row.label+'"},');
}
答案 1 :(得分:0)
数据库内容发生异常。调用.autocomplete()时,&#34; source&#34;被调用并在那里执行数据库查询。但是这个数据库查询tx.executeSql()将在以后的任何时候完成(async)和&#34; source&#34;自动完成的结果将不会有结果。
不幸的是我还没有找到如何为那些jquery插件解决这个问题,所以我继续围绕我的特定数据库查询构建自动完成。基本上,我从数据库查询开始,并为tx.executeSql()提供一个回调,它将填充我的自动完成下拉列表。