Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript push在if语句中不起作用_Javascript_Arrays_Loops - Fatal编程技术网

Javascript push在if语句中不起作用

Javascript push在if语句中不起作用,javascript,arrays,loops,Javascript,Arrays,Loops,我有下面的代码,但是items.push在if语句中时不起作用。如果在结束}之前取消对行的注释,则items.push将按预期工作 for (i = 0; i < len; i += 1) { row = resultexpense.rows.item(i); t.executeSql('SELECT * FROM expensepayments WHERE Barcode = ?', [row.barcode], function(t, res

我有下面的代码,但是items.push在if语句中时不起作用。如果在结束}之前取消对行的注释,则items.push将按预期工作

for (i = 0; i < len; i += 1) {
    row = resultexpense.rows.item(i);

    t.executeSql('SELECT * FROM expensepayments WHERE Barcode = ?',
    [row.barcode], 
        function(t, resultpaid) {
            var myrowpaid, 
                myrowpaidlen;
            myrowpaidlen = resultpaid.rows.length;
            alert(myrowpaidlen); //alerts 1
            if (myrowpaidlen > 0){
                myrowpaid = resultpaid.rows.item(0);
                alert(row.amount); //alerts 90
                alert(myrowpaid.Amount); //alerts 50
                if (row.amount > myrowpaid.Amount){
                    alert(row.amount- myrowpaid.Amount); //alerts 40
                    items.push('<li><a href="#displayexpense" data-description="' + row.description + '" data-buildingcode = "' + row.buildingcode + '" data-barcode="' + row.barcode + '" data-amount="' + row.amount + '" data-buildingaddress="' + row.buildingaddress + '">' + row.description + '</a></li>');
                }
            } else {
                items.push('<li><a href="#displayexpense" data-description="' + row.description + '" data-buildingcode = "' + row.buildingcode + '" data-barcode="' + row.barcode + '" data-amount="' + row.amount + '" data-buildingaddress="' + row.buildingaddress + '">' + row.description + '</a></li>');
            }

        });
//  items.push('<li><a href="#displayexpense" data-description="' + row.description + '" data-buildingcode = "' + row.buildingcode + '" data-barcode="' + row.barcode + '" data-amount="' + row.amount + '" data-buildingaddress="' + row.buildingaddress + '">' + row.description + '</a></li>');

}
我不确定变量的类型,它是数字还是字符串

如果typeof row.amount==string或typeof myrowpaid.amount==string,则不会执行if条件

当然,您的变量是数字类型,请使用parseInt函数将其转换为数字

if (parseInt(row.amount, 10) > parseInt(myrowpaid.Amount, 10)){
                alert(row.amount- myrowpaid.Amount); //alerts 40
                items.push('<li><a href="#displayexpense" data-description="' + row.description + '" data-buildingcode = "' + row.buildingcode + '" data-barcode="' + row.barcode + '" data-amount="' + row.amount + '" data-buildingaddress="' + row.buildingaddress + '">' + row.description + '</a></li>');
            }

如果您还没有减速items变量,那么添加var items=[];在使用items变量之前,executeSql调用是异步的。回调中的代码只有在数据库响应后才会运行,而数据库响应将在整个循环完成后运行。此外,您可能还应该编辑上一个问题,因为这是同一个问题。可能是重复的,那么正确的语法是什么。抱歉,我是JavaScription新手,可能会出现各种问题,但真正的问题是,他试图在所有查询回调完成之前使用数组。他说items.push在if条件之外工作,因此我认为他可能已经将items变量声明为数组。但是这个alertrow.amount-myrowpaid.amount;通知正确的结果40,以便两个金额numbers@K.K是的,但是列表的更新是在异步回调函数中完成的。在查询完成之前,更新不会发生。@user1081978:alertrow.amount+myrowpaid.amount是多少;说?