我有以下功能。它从复选框中获取值并将其传输到文本框。它正在工作......但仅当表单有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个复选框才能完成此操作的内容吗?谢谢你提前。
答案 0 :(得分:0)
当有一个项目时。它不返回数组
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();
}
答案 1 :(得分:0)
首先,您需要为输入指定不同的名称:
<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
的使用可避免使用尾随逗号。
答案 2 :(得分:0)
不确定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支持,请使用document.DataRequest.getElementsByTagName('input')而不是QSA,并迭代它们以收集值,如果它们具有checked属性。