HTML Form issue

 
因兼容DOM0的关系,form被设计成支持直接可通过name直接access到control。例如如有一个<input name="user"/>则可直接使用形如document.forms[0]["user"],或在没有特殊字符的情况下,可以直接document.forms[0].user。

然而这造成一个问题,即name若与form上的方法或属性冲突的话(例如form具有length属性,而同时给form增加一个name为length的控件),会如何?

经过我的测试,在IE(XP下的6.0)和FireFox(1.5)中,name都会覆盖原来的属性或方法。也就是优先向前兼容。

作为一种权衡,这种做法本无确定的好坏。但问题是这种行为,在编写脚本中,name与方法冲突下,会产生令developer意想不到的奇怪行为。而且没有在我看到的任何文档中记录。(或许我孤陋寡闻,有方法可以避免?)特别是在IE中,对于Element和一些内置方法的toString()居然都不负责任的返回“[object]”,一旦发生问题,完全令人毫无头绪。

比如,我正好有个脚本要检测form中是否含有特定name的control,而IE的form恰好有个额外的item方法,结果是我必须为此特别处理:

control = myForm[name];
if (typeof control == "undefined" ||
  (name == "item" && control == "[object]"))
  ...

当然,实际上我应该为所有form的属性和方法做特别检测。

显然,为了脚本能正常运行,不应该允许任何name的屏蔽(试想name为action、method、submit、reset等的情况)。然而要网页设计者记住一大堆应为form scripting保留的名字是不现实的。

所以结论是:这种向前兼容是错误的设计决策。

注:将其作为bug向mozilla提交了。不知会有什么回应。

时间: 2024-11-02 18:44:20

HTML Form issue的相关文章

如何安装 Tomcat 于 Windows、Mac、Ubuntu 三大系统中

TABLE OF CONTENTS (HIDE) 1.  Introduction1.1  Web Application (Webapp)1.2  Hypertext Transfer Protocol (HTTP)1.3  Apache Tomcat HTTP Server2.  How to Install Tomcat 7 and Get Started with Java Servlet Programming2.1  STEP 1: Download and Install Tomc

struts2 获取FCK值问题

问题描述 <form name="form1" method="post" action="issue.action"><table width="100%" border="0" id="login"><tr><td colspan="2">题目:<input name="title" typ

在ASP.NET中的变量数值管理--看了这个我基本上对原来的REQUEST.FORM的方法传递变量绝

Web form pages are HTTP-Based, they are stateless, which means they don't know whether the requests are all from the same client, and pages are destroyed and recreated with each round trip to the server, therefore information will be lost, therefore

在ASP.NET中的变量数值管理------看了这个我基本上对原来的REQUEST.FORM的方法传递变量绝望了

asp.net|request|变量 Web form pages are HTTP-Based, they are stateless, which means they don't know whether the requests are all from the same client, and pages are destroyed and recreated with each round trip to the server, therefore information will

Android开发技术周报 Issue#7

Android开发技术周报 Issue#7 声明:所有内容收集整理自网络.如有侵权,请联系删除. 业界新闻 1. Kotlin 1.1 正式版来了,基于 JVM 的编程语言 开发团队宣布,Kotlin 1.1 正式发布. 这是一个很大的进步,使 Kotlin 能在许多新的场景中使用. Kotlin 的愿景是在现代应用程序的所有组件中使用单一的表达式,高性能的强类型语言. Kotlin 1.1 为实现这一目标迈出了两大步. 2. React Native 0.42.0 正式发布,大量修复和改进 重

easyui form不提交后台

问题描述 easyui form不提交后台 jsp <div id="addDlg" class="easyui-dialog" title="新增信息" data-options="minimizable:false" style="width:700px;height:300px;padding:10px;" closed="true"> <div class=&q

java-Jsp+Servlet怎么在form中指定要访问的servlet中的方法名

问题描述 Jsp+Servlet怎么在form中指定要访问的servlet中的方法名 Jsp+Servlet怎么在form中指定要访问的servlet中的方法名,在Jsp中写了一个form,然后想指定访问servlet中的regist()方法,而不是doGet()或者doPost()方法,应该怎么样指定 解决方案 servlet只能指定post,get请求,你随便请求一个,在调一下regist()呗,或者重写父类service方法,在里面加入regist() 解决方案二: dopost里面判断调

打包Activiti的流程资源文件(bpmn20.xml、form、png)

1.资源文件介绍 Activiti的流程定义文件可以直接部署bpmn20.xml.zip.bar文件,其中后面的zip和bar类型一样都是压缩文件格式,bpmn20.xml是符合bpmn2.0规范的xml定义. 今天要解决的问题就是帮助大家打包流程资源文件,其中肯能包括:bpmn20.xml.png.form等文件. 大多数开发人员都是用Activiti Designer来设计流程定义,可能业务人员使用了其他的流程设计器来描述业务,然后开发人员用Activiti Designer来"深加工&qu

ssh中form向后台传值为null

问题描述 ssh中form向后台传值为null jsp中form部分如下 用户名: 密码: 搜索: 下面这个表传回后台的值为空Hibernate: select song0_.sid as sid3_ song0_.location as location3_ song0_.songname as songname3_ from Song song0_ where song0_.songname like '%null%' 这是查询语句public List findByName(String