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)
| 归档时间: |
|
| 查看次数: |
4632 次 |
| 最近记录: |