如何将此参数传递给此函数?

时间:2011-02-01 23:00:02

标签: javascript html5

这是我的功能:

  function updateRecord(id, textEl) {
    db.transaction(function(tx) {
      tx.executeSql("UPDATE products SET product = ? WHERE id = ?", [textEl.innerHTML, id], null, onError);
    });
  }

这是电话:

<span contenteditable="true" onkeyup="updateRecord('+item['id']+', this)">'+
        item['product'] + '</span>

我想在调用中添加一个参数,以便我可以将该函数用于多个列。这是我正在尝试但它不起作用:

<span contenteditable="true" onkeyup="updateRecord('+item['id']+', "product", this)">'+
        item['product'] + '</span>

  function updateRecord(id, column, textEl) {
    db.transaction(function(tx) {
      tx.executeSql("UPDATE products SET " + column + " = ? WHERE id = ?", [textEl.innerHTML, id], null, onError);
    });
  }

他们应该做同样的事情,我只在调用中指定 product 列而不是在函数中。我的语法不正确,我错过了什么吗?

编辑: 以下是呼叫所在的完整功能:

  // select all records and display them
  function showRecords() {
    document.getElementById('results').innerHTML = '';
    db.transaction(function(tx) {
      tx.executeSql("SELECT * FROM products", [], function(tx, result) {
        for (var i = 0, item = null; i < result.rows.length; i++) {
          item = result.rows.item(i);
          document.getElementById('results').innerHTML += 
              '<li><span contenteditable="true" onkeyup="updateRecord('+item['id']+', "product", this)">'+
        item['product'] + '</span> <a href="#" onclick="deleteRecord('+item['id']+')">x</a></li>';
        }
      });
    });
  }

1 个答案:

答案 0 :(得分:3)

更新:好的,那么问题只在于使用product的双引号。使用单引号并转义它们:

document.getElementById('results').innerHTML += 
          '<li><span contenteditable="true" onkeyup="updateRecord('+item['id']+', \'product\', this)">' + ...;

但你真的应该考虑重构你的代码。例如。你可以这样写:

var results = document.getElementById('results');
var container = document.createDocumentFragment();
for (var i = 0, l = result.rows.length; i < l; i++) {
    var item = result.rows.item(i);
    var li = document.createElement('li');

    var span = document.createElement('span');
    span.setAttribute('contenteditable', 'true');
    span.onkeyup = (function(item) {
            return function() {
                updateRecord(item['id'], 'product', this);
            }
    }(item));
    span.innerHTML = item['product'];

    var a = document.createElement('a');
    a.href = '#';
    a.onclick = (function(item) {
            return function() {
                deleteRecord(item['id'])
            }
    }(item));
    a.innerHTML = 'x';

    li.appendChild(span);
    li.appendChild(a);
    container.appendChild(li);
}
results.appendChild(container);

从长远来看,这是更多的代码,但更容易维护......


您有语法和引用问题。这应该有效:

onkeyup="updateRecord('item[\'id\']', 'product', this)"

但代码对我来说似乎有些奇怪。这是您的实际HTML还是回显或打印它?因为

<span...>'+ item['product'] + '</span>

在HTML中看起来很奇怪。它会将'+ item['product'] + '放在<span>标记内。请发布更完整的代码版本。