我的数据库中有一张表。每次调用addvaluetodb()时,它都会在表中创建一个新行,这表示单个记录。然后,每个记录都以JQM样式显示在列表视图中。现在我想在点击列表项时更新记录,所以我想知道,你如何得到你在listview中点击的项目的rowid?到目前为止,我有:
function updateRecord(){
if (!window.openDatabase) {
alert('Databases are not supported in this browser.');
return;
}
db.transaction(function(transaction) {
transaction.executeSql('UPDATE Income SET column1 = "updated" WHERE Id = ? \
',
nullHandler, errorHandler);
});
return;
}
这是一个测试功能,用于更新单击的项目的单个列,但我不确定如何获取该列表项的ID。任何帮助将不胜感激!
编辑:下面是我用来创建列表视图的代码。
transaction.executeSql('SELECT * FROM Income ORDER BY date DESC', [],
function(transaction, result) {
if (result != null && result.rows != null) {
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
$('#records').append('<li><a href ="javascript: updateRecord()">' + 'item1: ' + row['column1'] + '<br>' + 'item2: ' + row['column2'] + '<br>' + 'item3: ' + row['column3'] + '<br>' + 'item4: ' + row['column4'] + '</a></li>');
$( "#records" ).listview().listview("refresh");
}
}
},errorHandler);
},errorHandler,nullHandler);
编辑:我应该通过列表项的rowid添加我的意思是与该行的数据库相关的id。因此,如果它是第一行,它将是1等。当我点击任何列表项(表示表中的一行)时,我想知道如何获得此值。
编辑:这是更新代码
db.transaction(function(transaction) {
transaction.executeSql('UPDATE Income SET column1 = "updated" WHERE UserId = '+rowid+'\
',
nullHandler);
});
它工作正常,listview只是不会渲染到新文本
答案 0 :(得分:0)
在创建列表视图时,您只需在for循环后调用.listview("refresh");
一次。如果UL已经在HTML标记中,则不需要.listview()
,只需刷新。我会将rowid分配给listitem上的数据属性,而不是在锚点内调用javascript,为其分配一个类并处理该事件。假设rowid在column0中:
function(transaction, result) {
if (result != null && result.rows != null) {
var allItems = '';
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
allItems +='<li data-rowid="' + row['column0'] + '"><a href ="#" class="updateRecordButton">' + 'item1: ' + row['column1'] + '<br>' + 'item2: ' + row['column2'] + '<br>' + 'item3: ' + row['column3'] + '<br>' + 'item4: ' + row['column4'] + '</a></li>';
}
$( "#records" ).append(allItems).listview().listview("refresh");
}
},errorHandler);
现在为类,updateRecordButton添加一个单击处理程序(使用事件委托),并从父LI数据属性中获取rowid:
$(document).on("click", ".updateRecordButton", function(){
var rowid = $(this).parents("li").data("rowid");
//call your update code
updateRecord(rowid);
});