如何使用jQuery在表单提交上重新填充隐藏的CSV字段

时间:2010-11-25 11:07:25

标签: jquery forms 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字段也会发生变化(尽管这可能在表单提交时也可以完成?)。我认为使用创建的变量,应该可以在表单提交时重新填充CSV字段。即,使用selected_ids将复选框的ID添加到CSV的末尾(如果它们尚未存在)。可以这样做吗?

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');
}

在上一个问题中,有些人给了我这个代码:

$(':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(',');
    }
});

我认为这很接近,但还没有完全实现。在此之前,任何进一步的帮助都会很棒。

1 个答案:

答案 0 :(得分:3)

您可以使用.map简洁地从元素属性构建CSV:

$(":checkbox").change(function() {
    var csv = $(":checkbox:checked").map(function() {
        return this.id;
    }).get().join(",");
    alert(csv);
    $("input:hidden").val(csv);
});

演示:http://jsfiddle.net/karim79/tqAnX/2/

作为旁注,元素ID不应以数字开头。