使用JavaScript为空HTML标记分配一个值数组
表中的某些值具有相同的标记名:使用JavaScript为空HTML标记分配一个值数组,javascript,html,arrays,django,forms,Javascript,Html,Arrays,Django,Forms,表中的某些值具有相同的标记名: {% for groups in groupList %} <tr> <td id="checkboxes"> <input type="checkbox" name="check" id="check_{{groups.GroupID}}"> </td> <tr> {% endfor %} 我检查了Google Chrome控制台
{% for groups in groupList %}
<tr>
<td id="checkboxes">
<input type="checkbox" name="check" id="check_{{groups.GroupID}}">
</td>
<tr>
{% endfor %}
我检查了Google Chrome控制台,发现以下错误:
Uncaught TypeError: Cannot set property 'value' of undefined
at getChecked (1:75)
这突出了这一点:
document.getElementsByName("selected")[i].value = a.value;
我不确定我在这里哪里出错了。有人能帮我吗?一种解决方案是将选中的复选框的
id
作为隐藏输入的数组发送出去
例如,如果选中了复选框检查\u 1、检查\u 2和检查\u 3,则可以按以下方式构建表单:
在服务器中,您将以数组形式接收选定的
request.POST['selected']/[“checkbox\u 1”、“checkbox\u 2”、“checkbox\u 3”]
要在用户单击“提交”按钮时生成所有隐藏输入,可以执行以下操作:
- 为表单提供一个id,以访问它
{%csrf_令牌%}
为所选项目创建报告
- 添加以下脚本
var form=document.getElementById('my-form');//拿到表格
//当用户提交表单时,执行以下功能
form.onsubmit=函数(){
document.getElementsByName('check')//获取所有复选框
.forEach(函数(检查输入){
//如果选中该复选框
if(checkInput.checked){
//创建新的隐藏输入并添加到表单中
var hiddenInput=document.createElement('input');
setAttribute('type','hidden');
setAttribute('name','selected[]);
hiddenInput.setAttribute('value',checkInput.getAttribute('id');
表格.appendChild(hiddenInput);
}
});
return true;//返回true以继续提交执行
};
< />代码>听起来您比<代码> >选择< /代码> s有更多的<代码>检查< /代码> s(但是,您可能需要访问<代码> < <代码> >属性>代码>检查/代码>,而不是<代码>检查。值< /代码> -考虑使用更精确的变量名或类型检查器)尝试<代码>(检查的)。使用of
关键字可以循环遍历数组或节点列表,而不是中用于对象的。这似乎与Django无关。请使用[]
代码段编辑器发布一个仅包含纯HTML和脚本的文档。@mplungjan它是一个Django模板,如for标记所示。我把它包括在这个问题中,因为可能存在使用视图/模板的潜在解决方案。我想使用JavaScript将值从check转换为selected。不过,这个项目对表中的复选框数量没有限制。我没有办法写出足够多的隐藏输入字段来覆盖所有可能的内容。@Cm0295当然,你不需要手工创建隐藏输入。我希望您在单击submit按钮时动态创建隐藏输入的代码。
Uncaught TypeError: Cannot set property 'value' of undefined
at getChecked (1:75)
document.getElementsByName("selected")[i].value = a.value;