【问题标题】:Displaying optgroup values from DB显示来自 DB 的 optgroup 值
【发布时间】:2014-05-28 10:04:49
【问题描述】:

基本上,我有一个 jQuery Mobile 风格的多选 optgroup。选择选项后,它们在实际选择显示中显示为逗号分隔。我已经使用此代码来分隔每个选定的项目,并将它们分别放在我的 SQLite 表中的不同行上:

db.transaction(function(transaction) {
               var optgroup = String($('#myselect').val());
               var optarray = optgroup.split(',');
               for(var i=0; i<optarray.length; i++){
               transaction.executeSql('INSERT INTO mytable(myvalue)\
                                      VALUES(?)',[optarray[i]],
                                      nullHandler);
               }
               });
}

我的问题是:当我返回到带有 optgroup 的页面时,如何将这些值重新显示为逗号分隔?为了更清楚:

假设我从 select 中选择了 item1 和 item2...它看起来像 item1,item2

然后将它们分成两行

第 1 行第 1 项

第 2 行第 2 项

现在,当我返回该页面时,我想查看用户在 optgroup 中以原始逗号分隔形式选择的这些值。我希望这是有道理的,任何帮助将不胜感激

编辑:通常我只会从数据库中选择并在页面加载时显示带有选择 ID 的值,但我需要在一个选择菜单中显示来自多行的多个值

编辑:按照建议我尝试过

db.transaction(function(transaction) {

  transaction.executeSql('SELECT GROUP_CONCAT (columname) FROM mytable', [],
            function(transaction, result) {
            if (result != null && result.rows != null) {
            for (var i = 0; i < result.rows.length; i++) {
            var row = result.rows.item(i);
            $('#myselect').val(row['GROUP_CONCAT(columname)']);
            }
            $('#myselect').selectmenu('refresh');
            }
            },errorHandler);
  },errorHandler,nullHandler);

但是在检查返回的值时,它是空的。我将 group_concat 行放入数据库检查器中,它正确返回逗号分隔的行,但它们仍然不会显示在我的选择中。不确定返回类型是否是问题? group_concat 似乎返回一个字符串。

如果我尝试在没有 group_concat 的情况下显示,那么它会正确显示,但只会显示列中的最后一个元素

【问题讨论】:

  • 所以,澄清一下,您希望存储$('#myselect') 的值,以便在用户返回页面时显示最后选择的值?
  • 我已经存储了这些值,这只是在用户返回页面时显示它们的一种情况。如果它是一个普通的选择菜单,我可以很容易地做到这一点,但我只是无法在实际选择中显示多个值(来自多选),用逗号分隔

标签: javascript jquery sqlite jquery-mobile


【解决方案1】:

group_concat function 返回一个以逗号分隔的值列表:

SELECT group_concat(myvalue) FROM mytable

【讨论】:

  • 感谢您的建议,我试过了,我已经用结果编辑了我的问题
【解决方案2】:

为了更新选择,我们可以通过选择选项并将属性“selected”设置为true来设置值。而且因为我们使用的是 jQuery mobile,所以我们还必须在完成后刷新视图。选择行后,您可以将代码放入回调中。所以像

db.transaction(function(tx) {
    tx.executeSql("select colname from selected;", [], function(tx, result) {
        dataset = result.rows;
        for (var i = 0, item = null; i < dataset.length; i++) {
            item = dataset.item(i);
            //set option with value in colname to true
            $("option[value="+item['colname']+"]").attr("selected",true);
        }
            $("#select-choice").selectmenu("refresh") //refresh select
    });
});

Demo

【讨论】:

  • 我已经存储了用户在我的数据库(sqlite/websql)中选择的值。现在只是在页面加载时显示这些值的情况。我遇到的麻烦是它是一个多选,我不知道如何在选择上以逗号分隔的形式一次显示多个项目。我会尝试用 sqlite 实现这个答案
  • 另请注意,当我存储来自多选的值时,我通过拆分数组(代码在上面)将选择的每个项目存储在单独的行中,因此这可能会增加重新显示的困难
  • 更新我的答案的多选位有帮助吗?或者它是一个不同的多选/根本没有帮助?
  • 您的答案正是我所需要的,但在我得到它的格式和不同的存储方法中,我无法让它工作。多选本身和我的一样。如果我选择 item1,item2,item3 它会将此数组拆分为表中的 3 行,因此我正在寻找一种方法将其重新加入逗号形式并重新显示在选择菜单上,如果有意义的话,选择 item1,2 和 3跨度>
  • 如果您有一个包含 3 行的数组,您可以通过 array.join(",") 获取 csv。但是您也可以将其提供给$.each,即:$.each(array,func(){...}),它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2014-09-04
  • 2023-03-24
  • 2012-03-11
相关资源
最近更新 更多