我有一张表格:
<form id="f3" method="post" action="interface_add.php">
<fieldset>
<input onclick="this.value=''" class="te3" type="text" name="f3a" value="title"/>
<input onclick="this.value=''" class="te3" type="text" name="f3b" value="url"/>
<a id="f3c" class='but' href="javascript:void(0)" onclick="i3()">Add</a>
<a id="f3d" class='but' href="javascript:void(0)" onclick="i3a()">Delete</a>
</fieldset>
</form>
我使用一些Javsascript来“序列化”元素名称和值,如下所示:
function is(a)
{
var b='';
var c=document.forms[a].elements;
for(i=0;i<c.length;i++)
{
if(c[i].type=='checkbox'&&c[i].checked==false)
{
b+=c[i].name+"=NULL&";
}
else
{
b+=c[i].name+"="+c[i].value+"&";
}
}
b=b.slice(0,-1);
return b;
}
我从这里打电话:
function i3()
{
var a='';
a=is('f3');
然而,我得到的返回值是()插入'a'是
“未定义未定义=&安培; F3A =标题&安培; F3B = URL”
有趣的是我之前遇到过类似的问题,但这是因为我没有初恋'a'这就是为什么我打破了这个问题,主要是出于偏执,'a'没有正确初始化。
我可能忽略了一些简单的事情 - 但为什么会出现undefined = undefined出现。
答案 0 :(得分:2)
它来自<fieldset>
元素。
只需在循环内添加name
属性的测试即可。
for(i=0;i<c.length;i++) {
if( c[i].name ) {
// your code
}
}
答案 1 :(得分:1)
您可能希望跳过所有未命名的元素,例如fieldset。
function is(a)
{
var b='';
var c=document.forms[a].elements;
for(i=0;i<c.length;i++)
{
if (c[i].name == undefined) continue; // skip all unamed elements
if (c[i].type == 'checkbox' && c[i].checked == false)
{
b += c[i].name + "=NULL&";
}
else
{
b += c[i].name + "=" + c[i].value + "&";
}
}
b = b.slice(0,-1);
return b;
}
答案 2 :(得分:1)
您可以只使用复选框,而不是使用名称:
if(c[i].type=='checkbox')
{
if (c[i].checked==false)
{
b+=c[i].name+"=NULL&";
}
else
{
b+=c[i].name+"="+c[i].value+"&";
}
}
}
当然,您只需使用提交按钮而不是链接,然后让表单自行提交:
<input name="add" type="submit" value="Add">
<input name="delete" type="submit" value="Delete">
如果用户点击“添加”按钮,则会以...add=Add...
的形式发送一个值,如果他们点击“删除”按钮,则会发送...delete=Delete...
。