分享、学习、提高
2009/09/24 14:15
文章作者:Enjoy 转载请注明原文链接。
有朋友问我,同一个表单,但里面有个input的name是action,跟form里面的action会有冲突。

我开始还直接回答:

表单名为form1
input里的action值是document.form1.action.value
form里的action值是document.form1.action
应该不会冲突。

但实践证明,确实会冲突。

当有ipnut的name为action时,通过JS给form里的action赋值时,会提示:Error:Object doesn't support this property or method。

在网上查了下,可以能过form的attributes来罗列form的各项属性,我测试的form名为hx。
  frm = document.hx;
  for(i=0;i<frm.attributes.length;i++){  
    document.write(frm.attributes[i].name+"-------Index:"+i+"<br>");  
  }

发现action的属性是83,通过设置frm.attributes[83].value,就可以更改form中的action值。
不过,在FF和Chrome下,action不是83是2,所以要兼容多个浏览器的话,还得再多判断下。

以下是示例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title></title>
<body>  
  <form action="" method="post" name="hx">
    <input type="text" value="13055210000" name="key">
    <input type="hidden" value="" name="mobile">
    <input type="hidden" value="" name="action">
    <input type="hidden" value="" name="ip">
    <a href="javascript:a()">a</a>
    <a href="javascript:b()">b</a>
    </form>
<script type="text/javascript">
  frm = document.hx;
  for(i=0;i<frm.attributes.length;i++){  
    document.write(frm.attributes[i].name+"-------Index:"+i+"<br>");  
  }  
  
  function a(){
    frm = document.hx;
    frm.attributes[83].value="http://www.ip138.com:8080/search.asp";
    //frm.action = "http://www.ip138.com:8080/search.asp";
    frm.mobile.value=frm.key.value;
    frm.action.value="mobile";
    frm.submit();
}
  function b(){
    frm = document.hx;
    frm.attributes[83].value="http://www.ip138.com/ips8.asp";
    frm.ip.value=frm.key.value;
    frm.action.value="2";
    frm.submit();
}
</script>

</body>
</html>
发表评论
表情
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写