IE7默认表单方法是"GET".如何判断它是用户输入还是默认?

Mat*_*lor 7 javascript browser internet-explorer dom

如果用户创建没有方法属性的表单,似乎大多数浏览器将在表单提交时处理此问题.因此,在DOM准备好之后检查表单元素时,您可以看到表单元素对象没有"方法"attr.

但是,IE7显然在没有方法值的所有表单上设置了"GET"的默认方法值.我不想争论GET或POST是否是最合理的默认值,我只是想找到一种方法使POST成为所有浏览器的默认表单方法.

我的问题是我无法判断用户是否为表单方法输入了"GET"值,或者IE是否将该值注入默认值.如果表单没有方法属性,很明显用户没有指定一个,所以我可以安全地将其默认为POST.但是如果我看到一个表单方法的GET值,我无法判断用户是否指定了它,或者它是否为黑色并且IE7在解析HTML时设置了GET.

有人有主意吗?

bob*_*nce 17

IE的行为是正确的!(*)根据DTD:

method      (GET|POST)     GET       -- HTTP method used to submit the form--
Run Code Online (Sandbox Code Playgroud)

或者,在XHTML DTD中:

method      (get|post)     "get"
Run Code Online (Sandbox Code Playgroud)

这意味着如果method省略该属性,不仅默认情况下表单提交为GET,而且DOM实际上应该包含具有DTD默认值的Attr节点.methodGET

(*:好吧,有点.IE正在HTML文档中使用XHTML小写默认值,它应该是大写的.并不是因为HTML无论如何都不区分大小写这个属性真的很重要.嘿!它是IE比其他所有浏览器都更加正确.这是一个奇迹!)

那么你怎么知道Attr节点是因为DTD属性默认而放在那里而不是因为它在源中呢?使用DOM Level 1 Core 指定标志:

var form= document.getElementById('myform');
var attr= form.getAttributeNode('method');
var isomitted= attr===null || !attr.specified;
Run Code Online (Sandbox Code Playgroud)

  • 是的,我的想法是通过该测试来容纳其他浏览器. (2认同)