簡體   English   中英

如何使用phonegap android從函數中的值返回到另一個

[英]how to return a value from function to another in js using phonegap android

我正在創建一個應用程序,其中我正在使用jQuery Mobile自動完成功能。 要創建列表視圖,我正在js文件中調用一個函數。 當用戶在輸入字段中輸入字符時,它將調用js文件,然后我想調用另一個函數,該函數返回以從數據庫訪問數據,它將創建和數組對象,而這個創建的數組我想回傳到調用的函數,然后它將在該數組上創建li基礎。 這是demoautocomplete.js內部的代碼

function createlist(autocomplete_name){
var objdata=['user_name','user_id'];

$( "#"+autocomplete_name).on("listviewbeforefilter", function ( e, data ) {
    var autocompleteData=new Array();
    var $ul = $( this ),
        $input = $( data.input ),
        value = $input.val(),
        html = "";
    $ul.html( "" );
   getdatafromtable(autocompleteData,value); var dataarray=getdatafromtable(autocompleteData);
    if ( value && value.length > 1 )
    {
        $.mobile.loading('hide');
        for(var j=0;j<dataarray.length;j++)
        {

            html +="<li id='"+dataarray[j].id+"'>"+dataarray[j].user_name+"</li>";
        }
            $ul.html( html );
            $ul.listview( "refresh" );
            $ul.trigger( "updatelayout");
            $.mobile.activePage.find('input[placeholder="Find a name..."]').attr('id','autocomplete');
        }
     $("ul>li").click(function()
             {
                var textval=$(this).text();
                var id=$(this).attr('id');
                $('#autocomplete').val(textval);
                $.mobile.activePage.find("[data-role=listview]").children().addClass('ui-screen-hidden');
                storeselectedid(id,autocompleteData);
        });
});
    }
function getdatafromtable(autocompleteData,value){
db.transaction(function(tx){
    $.mobile.loading('show');
    var selectQuery='select first_name||" "||last_name user_name,user_id from users where first_name like "%'+value+'%" or last_name like "%'+value+'%" limit 10';
    var selectQuery1='select account_name user_name,account_id from crm_account where account_name like "%'+value+'%" limit 10';
    tx.executeSql(selectQuery,[],function(tx,results){
        var dataset=results.rows;
        if(dataset.length>0){
        for(var i=0;i<dataset.length;i++)
        {
                    var item=dataset.item(i);
                    var element = new Object();
                        element['id']=autocomplete_name+"_"+i;

                    for(var j=0;j<objdata.length;j++)
                    {
                        element[objdata[j]]=item[objdata[j]];

                    }
                autocompleteData[i]=element; 
            }
return autocompleteData;
        }
    });
});  }

這里的html中的腳本代碼將從js處調用:

$(function(){
<ul id="autocomplete" data-role="listview" data-inset="true" data-filter="true" data-filter-placeholder="Find a name..." 
data-filter-theme="d" >
</ul>
var autocomplete=$(document.createElement('ul')).attr('id',autocomplete_name);
    autocomplete.attr('data-role','listview');
    autocomplete.attr('data-inset',true);
    autocomplete.attr('data-filter',true);
    autocomplete.attr('data-filter-placeholder','Find a name');
    autocomplete.appendTo("#contentDemo");
    createlist(autocomplete_name); });

調用getdatafromtable函數時,應在數組對象中創建填充數據,並將該數組對象傳遞回createlist函數,然后執行循環。 以下是代碼流程的工作方式:1.當用戶在輸入字段中輸入字符時,將加載頁面。 2.它將進入js文件,然后將輸入值分配給值變量。 我想將其傳遞給函數getdatafromtable,以便基於o的輸入從數據庫中獲取數據。 3.檢索存儲在數組對象中,而不是將其從調用處傳遞回函數。 4.檢索數組數據后,應創建li listview。 任何幫助表示贊賞。 提前致謝。

假設您的getdatafromtable函數正確地返回了數組

var data_array = getdatafromtable(autocompleteData);

getdatafromtable函數中,您應該有一個return語句返回一個數組

也不要將您的變量命名為已經存在的函數。 在這種情況下, autocompleteData既是局部變量又是函數名稱。

編輯:

$("#" + autocomplete_name).on("listviewbeforefilter", function (e, data) {
    var autocompleteData = new Array();
    var $ul = $(this),
        $input = $(data.input),
        value = $input.val(),
        html = "";
    $ul.html("");
    getdatafromtable(autocompleteData, $ul, $input, value, html);
});

function after_data_retrieved(autocompleteData, $ul, $input, value, html) {
    if (value && value.length > 1) {
        $.mobile.loading('hide');
        for (var j = 0; j < dataarray.length; j++) {

            html += "<li id='" + dataarray[j].id + "'>" + dataarray[j].user_name + "</li>";
        }
        $ul.html(html);
        $ul.listview("refresh");
        $ul.trigger("updatelayout");
        $.mobile.activePage.find('input[placeholder="Find a name..."]').attr('id', 'autocomplete');
    }
    $("ul>li").click(function () {
        var textval = $(this).text();
        var id = $(this).attr('id');
        $('#autocomplete').val(textval);
        $.mobile.activePage.find("[data-role=listview]").children().addClass('ui-screen-hidden');
        storeselectedid(id, autocompleteData);
    });
}

function getdatafromtable(autocompleteData,  $ul, $input, value, html) {
    db.transaction(function (tx) {
        $.mobile.loading('show');
        var selectQuery = 'select first_name||" "||last_name user_name,user_id from users where first_name like "%' + value + '%" or last_name like "%' + value + '%" limit 10';
        var selectQuery1 = 'select account_name user_name,account_id from crm_account where account_name like "%' + value + '%" limit 10';
        tx.executeSql(selectQuery, [], function (tx, results) {
            var dataset = results.rows;
            if (dataset.length > 0) {
                for (var i = 0; i < dataset.length; i++) {
                    var item = dataset.item(i);
                    var element = new Object();
                    element['id'] = autocomplete_name + "_" + i;

                    for (var j = 0; j < objdata.length; j++) {
                        element[objdata[j]] = item[objdata[j]];

                    }
                    autocompleteData[i] = element;
                }
            }
            after_data_retrieved(autocompleteData, $ul, $input, value, html);
        });
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM