在IE6中读取表单动作属性,如果表单有一个名为“action”的字段

时间:2009-09-04 09:26:30

标签: javascript html internet-explorer-6 html-form

鉴于以下form

<form id="myForm" action="index.php">
    <input type="hidden" name="action" value="list" />
    <input type="submit" />
</form>

如何使用IE6获取表单( index.php )的action属性的值?

提示:我试过了

document.getElementById('myForm').action

document.getElementById('myForm').getAttribute('action')

但它们都不起作用。它们都返回input字段(document.getElementById('myForm').action.value == 'list')。

4 个答案:

答案 0 :(得分:4)

大卫是对的。这是一个比正则表达式更糟糕的方式:

var action= document.forms.myForm.cloneNode(false).action;

(因为克隆很浅,新表单元素中没有'input name =“action”'来混淆它。)

答案 1 :(得分:4)

使用节点的attributes集合有一种简单的方法:

document.getElementById("myForm").attributes["action"].value

测试页面试试(也展示了getAttribute的破坏,如David Dorward所说):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Form Action Access</title>
<script type="text/javascript">
function dotAccess()
{
    alert(document.getElementById("myForm").action.value);
}
function getAttributeAccess()
{
    alert(document.getElementById("myForm").getAttribute("action"));
}
function attributesAccess()
{
    alert(document.getElementById("myForm").attributes["action"].value);
}
</script>
</head>
<body>
<form id="myForm" action="foo">
  <input type="hidden" name="action" value="bar">
  <input type="button" onclick="dotAccess()" value="form.action">
  <input type="button" onclick="getAttributeAccess()" value='form.getAttribute("action")'>
  <input type="button" onclick="attributesAccess()" value='form.attributes["action"]'>
</form>
</body>
</html>

答案 2 :(得分:3)

没有一种简单的方法。

动作字段的存在,破坏形式的动作属性和getAttribute在IE中被破坏&lt; 8。

我能想到的唯一方法就是弄乱正则表达式。我强烈建议改变表格,使用不同的字段名称,而不是“行动”,如果可能的话。

var form = document.forms.myForm;
var action = form.getAttribute('action');
if (action === form.elements.action) {
       // getAttribute broken;
       var string = form.outerHTML;
       return string.match(/action=(.*?)[> ]/)[1];
} else {
       return action;
}

那个正则表达式可能不够健壮。所以,如果你使用它,请仔细测试。

答案 3 :(得分:0)

我刚刚找到另一种方法:使用或克隆prototypejs中可用的readAttribute方法。