【问题标题】:Append elements asynchronously异步添加元素
【发布时间】:2020-01-02 23:25:27
【问题描述】:

我正在尝试根据查询结果创建元素并将它们放入相应的p 容器中。问题是所有元素最终都在最后一个容器中,而不是它们应该放在的位置。

app.Controller.prototype.doReadOnlyDefault = function() {
  var def = $.Deferred();
  app.db.transaction(function(tx) {
    tx.executeSql("SELECT * FROM table", [], function(tx, res) {
      var len = res.rows.length;
      var div = document.createElement("div");
      if (len !== 0) {
        var li = document.createElement("li");
        var lbl = document.createElement("label");
        lbl.textContent = res.rows.item(0).label;
        lbl.id = 'lbl' + res.rows.item(0).id;
        for (var i = 0; i < len; i++) {
          var item = res.rows.item(i);
          var pLu = document.createElement("ul");
          var txt = document.createElement("p");
          //yrdy
          app.checkinController.doDependent(id).done(function(val) {
            if (val) {
              pLu.className = "moc-checkin-field-group moc-checkin-name-group moc-checkin-field-readonly";
              pLu.appendChild(val);
            }
          });
          txt.appendChild(pLu);
          lbl.appendChild(txt);
        }
        li.appendChild(lbl);
        div.appendChild(li);
        def.resolve(div);
      } else {
        def.resolve(false);
      }
    });
  }, function(error) {
    console.log("'doDefault ERROR: '" + error.message);
  }, function() {
    //console.log("'doDefault OK: '");
  });
  return def.promise();
}

【问题讨论】:

  • 你得到了什么 html 结构?你期待什么?

标签: javascript jquery jquery-mobile


【解决方案1】:

您正在被范围界定所困扰。您在 done 闭包中访问 pLu,但该变量对外部函数来说是词法,而不是闭包。因此所有的闭包都在看同一个pLu!如果您将代码中的 var 语句更改为 let 语句,事情应该会解决。

【讨论】:

  • 效果很好。非常感谢你,你是一个救生员。
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2019-01-02
相关资源
最近更新 更多