【问题标题】:How to populate a series of checkboxes from a hidden csv field using jQuery如何使用 jQuery 从隐藏的 csv 字段中填充一系列复选框
【发布时间】:2010-08-26 13:46:58
【问题描述】:

我有一个带有一堆复选框的表单,以及一个包含 CSV 数据的隐藏字段。基本上,我需要根据隐藏字段的值来勾选复选框:

<form>

    <input type="checkbox" id="01" name="01" />
    <input type="checkbox" id="02" name="02" />
    <input type="checkbox" id="03" name="03" />

    <input type="hidden" value="03,01," />

</form>

因此,在上面的示例中,需要在页面完成加载时勾选复选框 01 和 03。我还需要确保当复选框的值发生变化时,隐藏的 CSV 字段也会发生变化(尽管这可能在表单提交时完成?)。

我有限的 jQuery 知识让我对此一无所知,任何帮助将不胜感激。 (我知道其中一些最好在服务器端完成,但除了 javascript 我无法访问任何东西)。

下面的答案可以满足我的大部分需求。我认为使用创建的变量,应该可以在表单提交时重新填充 CSV 字段。即,使用 selected_ids 将选中框的 id 添加到 CSV 的末尾(如果它们不存在)。这个可以吗?

【问题讨论】:

    标签: jquery csv input hidden


    【解决方案1】:
    var csvValue = $('#csv-input').val();
    var selected_ids = csvValue.split(',');
    for (var i = 0; i < selected_ids.length; i++)
    {
        var selected_id = selected_ids[i];
        $('#' + selected_id).attr('checked', 'checked');
    }
    

    【讨论】:

    • 好的,谢谢。像我这个白痴一样跟我说话。我可以看到“selected_ids”在#csv-input 中返回了一个包含所有 CSV 数据的数组,但是没有检查具有相应 ID 的复选框。我尝试将第五行更改为 $('#' + '0' + i).attr('checked', 'checked');但这只是检查前两个复选框(数组的总长度?)是否可以重新处理上述内容,以便所有复选框的 id 可以是任意的(即更具描述性),同时仍然保持简洁那个代码?
    • 我已经编辑了代码,它不能正常工作。现在,它从 selected_ids 中检索 id。您可以使用任何 id 名称,而不仅仅是数字。
    • 非常感谢,太完美了。
    【解决方案2】:
    $(':checkbox').bind('change', function(event){
        if (this.checked == true){
          // add to hidden field
          var tempIdStr = $('#cvs-input').val();
          // if not in hidden value already
          if (tempIdStr.indexOf(this.id) > -1){
              tempIdStr += "id,"; // or ", id" depending on how you are seperating the ids
             $('#cvs-input').val(tempIdStr);
          }
        } else {
        // remove from hidden field
          var tempIds = $('#cvs-input').val().split(',');
          var index = tempIds.indexOf(this.id);
          if (index > -1){
              tempIds.splice(index, 1);
              $('#cvs-input').val(tempIds.join(',');
        }
    });
    

    【讨论】:

    • 这一行: var tempIdStr += "id," // 或 ", id" 取决于您如何分隔 id 会引发错误。这部分到底在做什么,我应该如何修改它?
    • cvs-input 的值是一个逗号分隔的 id 列表。取决于值是否在列表末尾已经有一个逗号,您不想添加另一个逗号,因为它看起来像 exp。 01, , 02 但是,如果您没有在末尾添加逗号,则需要在要添加的 id 的开头添加一个逗号。
    • 抱歉忘记了 if 语句的结尾……你可能搞糊涂了
    • tempIdStr 被声明了两次,不是吗?这仍然不起作用,但我无法弄清楚到底出了什么问题。
    • ya tempIdStr 在checked== true 部分被声明了两次,我也出于某种原因在 indexOf() > 0 进行检查,而它应该是 > -1 试试这个
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2011-03-29
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多