这个额外的名称/价值对来自哪里?

时间:2011-07-06 02:37:27

标签: javascript forms

我有一张表格:

  <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出现。

3 个答案:

答案 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...