Javascript:检测复选框不适用于只有 1 个复选框的表单.使用 2 个或更多
Javascript: Detect checked boxes isn't working with form with only 1 checkbox. Working with 2 or more
我有下面的函数。它从复选框中获取值并将其传输到文本框。它正在工作...但仅当表单具有 2 个或更多复选框时。
<script type="text/javascript">
function sendValue()
{
var all_values = '';
boxes = document.DataRequest.itens.length
for (i = 0; i < boxes; i++)
{
if (document.DataRequest.itens[i].checked)
{
all_values = all_values + document.DataRequest.itens[i].value + ","
}
}
window.opener.document.getElementById('emailto').value = all_values;
self.close();
}
</script>
<form name="DataRequest">
<input name="itens" type="checkbox" value="name1">
<input name="itens" type="checkbox" value="name2">
</form>
我是否缺少仅使用 1 个复选框即可完成这项工作的内容?
当有一个项目时。 它不返回数组
function sendValue()
{
var all_values = '';
boxes = document.DataRequest.itens.length
if(boxes>1)
{
for (i = 0; i < boxes; i++)
{
if (document.DataRequest.itens[i].checked)
{
all_values = all_values + document.DataRequest.itens[i].value + ","
}
}
}
else
{
if (document.DataRequest.itens.checked)
{
all_values = document.DataRequest.itens.value
}
}
window.opener.document.getElementById('emailto').value = all_values;
self.close();
}
首先,您需要为输入指定不同的名称:
<form name="DataRequest">
<input name="item1" type="checkbox" value="name1">
<input name="item2" type="checkbox" value="name2">
</form>
在您的情况下,对输入使用相同的名称在技术上是可行的,但这是一种糟糕的做法,因为名称通常是不同输入表单的标识。
然后,若要访问输入,必须使用其他语法。可以有多个版本,但您可以这样做:
var boxes = document.forms['DataRequest'].getElementsByTagName('input');
var tokens = [];
for (var i=0; i<boxes.length; i++) {
if (boxes[i].checked) tokens.push(boxes[i].name+'='+boxes[i].value);
}
var all_values = tokens.join(',');
请注意,使用 join
可避免尾随逗号。
不确定您需要与IE 6 - 8的兼容性,但如果不需要,您可以使用
function serializeChecked() {
var values = [];
var checked_boxes = document.querySelectorAll('form[name="DataRequest"] input[checked]');
for (var i = 0, l = checked_boxes.length; i < l; i++) {
values.push(checked_boxes[i].getAtrribute('value'))
}
return values.join(',');
}
function sendValue() {
window.opener.document.getElementById('emailto').value = serializeChecked();
}
如果确实需要 IE 支持,请使用文档。DataRequest.getElementsByTagName('input') 而不是 QSA,并循环访问它们以收集值(如果它们具有 checked 属性)。
相关文章:
- jquery从2个json字符串构建一个复选框表单
- ASP MVC复选框表单提交问题
- 如果用户未选中复选框或选择按钮,如何为复选框或单选按钮设置一些默认值
- 如何禁用自定义复选框的单击事件
- 复选框表单字段名称在表单提交淘汰js时不提交
- Angular,获取Ng中复选框(或单选框)所需的Ng重复
- 复选框-在单击待办事项列表的复选框时划掉文本
- 如何在选中所有输入复选框和单选组后显示javascript确认消息
- JavaScript 复选框表 - 如何添加值并查找最高值
- Javascript 复选框表单验证
- Jquery复选框分组 - 单击至少一个子复选框时取消选中父项,选中所有子复选框时选中父项
- 复选框在单击时隐藏行
- 如何在复选框更改单击时唯一标识 jQuery 函数
- 禁用复选框在单击其行时起作用
- 根据复选框的单击来改变表内行的颜色
- Javascript表单验证复选框和单选不起作用
- 如何将复选框表单字段从一个表单复制到另一个
- 在表单操作与复选框或单选按钮之间交替进行
- 如何在不使用复选框或单选按钮的情况下将表中选定的数据发送到Struts2中
- BootStrap Modal + JS/AJAX 复选框表单提交