javascript - 如何将这个参数传递给这个函数?

标签 javascript html

这是我的功能:

  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>';
        }
      });
    });
  }

最佳答案

更新: 好的,那么问题仅在于 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>标签。请发布更完整的代码版本。

关于javascript - 如何将这个参数传递给这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868953/

相关文章:

javascript - 为什么xsjs不允许表名使用小写?

performance - 为什么 Lo-Dash _.each 比 Boiler.js _.each 和 Underscore.js _.each 快?

javascript - 链接 rxjs 运算符

javascript - 从视频中获取 MediaStreamTrack(audio)

php - 在源代码 View 中加密 html 代码

javascript - 从 MongoDB 检索 Docker 日志

javascript - 如果字符串中间有双引号“Jquery DataTable 搜索行为不正确

javascript - 使用 jQuery 添加元素而不替换其他元素

html - 如何找到 xmlns 定义?

html - 将滚动条添加到模态窗口