【问题标题】:Assign an array of values to an empty HTML tag with JavaScript使用 JavaScript 将值数组分配给空的 HTML 标记
【发布时间】:2020-05-06 05:53:39
【问题描述】:

我在一个表中有一些具有相同标签名称的值:

{% for groups in groupList %}
    <tr>
        <td id="checkboxes">
            <input type="checkbox" name="check" id="check_{{groups.GroupID}}">
        </td>
    <tr>
{% endfor %}

但是,我希望这些数据位于其他位置,以便可以在表单中将其用于 POST 请求。这是我的表单 HTML:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <button type="submit" name="create"> Create Report for Selected Items </button>
    <input type="hidden" name="selected" value="" />
</form>

我一直在尝试使用 JavaScript 将值从 check 转移到 selected。这是我目前所拥有的:

function getChecked()
        {
                var checked = document.getElementsByName("check");
                var i = 0;
                for (a in checked)
                {
                        document.getElementsByName("selected")[i].value = a.value;
                        i = i + 1;
                }
        }

我检查了 Google Chrome 控制台并收到此错误:

Uncaught TypeError: Cannot set property 'value' of undefined
at getChecked (1:75)

突出显示这一行:

document.getElementsByName("selected")[i].value = a.value;

我不确定我在哪里出错了。谁能帮帮我?

【问题讨论】:

  • 听起来你的checks 比selecteds 多(而且,你可能想访问checkeda 属性,而不是checked.value - 考虑使用更精确的变量名或类型检查器)
  • 试试for (a of checked)。使用 of 关键字可以让您循环遍历数组或节点列表,而不是用于对象的 in
  • 这似乎与 Django 无关。请使用[&lt;&gt;] sn-p 编辑器发布minimal reproducible example,仅使用纯 HTML 和脚本。
  • @mplungjan 它是一个 Django 模板,如 for 标签所示。我将它包含在这个问题中,因为可能有使用视图/模板的潜在解决方案。
  • 我想使用 JavaScript 将值从 check 转移到 selected 中。

标签: javascript html arrays django forms


【解决方案1】:

一种解决方案可能是将选定复选框id作为隐藏输入数组发送。

例如,如果您选择了复选框 check_1check_2check_3,则可以将表单构建为

<form ...>
  <input type="hidden" name="selected[]" value="checkbox_1"/>
  <input type="hidden" name="selected[]" value="checkbox_2"/>
  <input type="hidden" name="selected[]" value="checkbox_3"/>

  <input type="submit" ... />
</form>

在您的服务器中,您将收到 selected 作为数组

request.POST['selected'] // ["checkbox_1", "checkbox_2", "checkbox_3"]

要在用户单击提交按钮时构建所有隐藏的输入,您可以这样做:

    1. 为您的表单提供一个 id 以使用 javascript 访问它
<form id="my-form" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <button type="submit" name="create"> Create Report for Selected Items 
  </button>
</form>
    1. 添加以下脚本
<script>
var form = document.getElementById('my-form');  // get the form

// when the user submit the form execute the following function
form.onsubmit = function() {
  document.getElementsByName('check')  // get all checkboxes
    .forEach(function(checkInput) {
      // if the checkbox is selected
      if (checkInput.checked) {
        // create a new hidden input and add into the form
        var hiddenInput = document.createElement('input');
        hiddenInput.setAttribute('type', 'hidden');
        hiddenInput.setAttribute('name', 'selected[]');
        hiddenInput.setAttribute('value', checkInput.getAttribute('id'));
        form.appendChild(hiddenInput);
      }
    });
  return true;  // return true to continue the submit execution
};
</script>

【讨论】:

  • 这个项目对表格中的复选框数量没有限制。我没有办法写出足够多的隐藏输入字段来肯定涵盖所有可能性?
  • @Cm0295 当然,您不需要手动创建隐藏输入。我的目的是在您单击提交按钮时动态创建隐藏输入的代码。
猜你喜欢
  • 2018-10-27
  • 2015-08-26
  • 1970-01-01
  • 2021-02-17
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多