0
$("#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
    });    

源函数返回此 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,

这是为什么?

4

2 回答 2

0

Try declaring the jsonClientes as an array and then use .push to store values inside it. i.e

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+'"},');
                        }
于 2013-03-08T03:53:05.290 回答
0

数据库的东西是异步发生的。当 .autocomplete() 被调用时,“源”上的函数被调用,并在那里执行数据库查询。但是这个数据库查询 tx.executeSql() 将在未来的任何时候完成(异步)并且自动完成的“源”不会有结果。

不幸的是,我还没有找到如何解决这类 jquery 插件的问题,所以我继续围绕我的特定数据库查询构建一个自动完成功能。基本上,我从数据库查询开始,并为 tx.executeSql() 提供一个回调,它将填充我的自动完成下拉列表。

于 2014-03-24T09:48:04.850 回答