【问题标题】:push does not works inside if statementpush 在 if 语句中不起作用
【发布时间】:2012-09-27 19:35:48
【问题描述】:

我有下面的代码,但items.pushif 语句中时不起作用。如果在结束 } 之前取消注释该行,则 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>');

}

【问题讨论】:

  • executeSql() 调用是异步。回调中的代码在数据库响应之后才会运行,这将是整个循环完成之后。
  • 另外,您可能应该刚刚编辑了您之前的问题,因为它是同一件事。
  • 那么正确的语法是什么。抱歉,我是 javascript 新手

标签: javascript arrays loops


【解决方案1】:

我不太确定typeof 你的变量是什么,是number 还是只是string

如果typeof row.amount == "string"typeof myrowpaid.Amount == "string"if 条件不会执行。

可以肯定,你的变量是number类型,使用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 变量进行减速,请在使用 items 变量之前添加 var items = [];

【讨论】:

  • 可能有各种问题,但真正的问题是他在所有查询回调完成之前尝试使用数组。
  • 他说 items.push 在 if 条件之外工作,所以我认为他可能已经将 items 变量声明为数组。
  • 但是这个警报(row.amount- myrowpaid.Amount);提醒正确的结果 (40) 所以这两个数量是数字
  • @K.K 是的,但是列表的更新正在在异步回调函数中完成。在查询完成之前不会发生更新。
  • @user1081978:什么是警报(row.amount + myrowpaid.Amount);说?
猜你喜欢
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2016-04-25
相关资源
最近更新 更多