[英]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.