如何从列表视图中获取所选元素的rowid

时间:2014-04-14 20:27:14

标签: sqlite listview jquery-mobile

我的数据库中有一张表。每次调用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只是不会渲染到新文本

1 个答案:

答案 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);
});