这是我的功能:
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>';
}
});
});
}
答案 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>
标记内。请发布更完整的代码版本。