1 表单引用获取1.2 表单提交1.3 表单重置2 表单字段获取2.1 共有属性2.2 共有方法3 enctype 表单编码3.1 application/x-www-form-urlencoded(默认)3.2 multipart/form-data">x 浏览器提交表单的过程9 项目遇到的问题9.1 focus()不生效autofocus不生效参考:高程3-14章 / 犀牛书15.9 1 表单引用获取html中,表单是由元素来表示的。对应js中的dom对象拥有reset/submit等特殊方法和属性。获取表单元素的引用有两种: 常规获取dom var form = document.getElementById(selector) document.forms接口(可以获取页面中所有的表单) 通过索引 var firstForm = document.forms[0] 通过name var myForm = doucument.forms[“myForm”] 1.2 表单提交两张方式 用户交互(单击 或 控件聚焦+回车键)(前提:表单存在提交或图像按钮元素) <input type=”submit” value=”提交”> 这种方式提交表单时,浏览器会在发送请求前触发submit事件我们可以在此验证表单数据,以决定是否容许提交 提交 js编程提交 (表单无需存在提交按钮) var form = doucument.forms[“myForm”]form.submit() 不会触发表单的submit事件 1.3 表单重置同提交一样,有两种方式— 或 reset—form.reset()但是这两中方式都可以出发reset事件(红宝书如是说,犀牛书说form.reset不会触发) 2 表单字段获取同表单一样,也有两张方式,第一种就是普通的原生dom方法访问表单元素第二种,通过form.elements属性(是表单中所有表单元素的集合),可以按照位置和name来访问具体的表单元素 var inputs = document.getElementById("form1").elements;var inputByIndex = inputs[2];var inputByName = inputs["login"]; 2.1 共有属性 disabled form name readonly type value 对于type属性,注意单选列表type为select-one 多选列表type为select-multiple 2.2 共有方法focus() 和 blur() 3 enctype 表单编码该属性规定在发送到服务器之前应该如何对表单数据进行编码。参考:http://protocol.taohui.tech/app/form.html 3.1 application/x-www-form-urlencoded(默认) 3.2 multipart/form-data对与包含文件的表单,需要设置成改值,具体参见:timegeek-web协议详解和抓包-22节 比如:请求包体可以在wiresharke抓包工具中看到: x 浏览器提交表单的过程 9 项目遇到的问题 9.1 focus()不生效项目表单存在一些特殊样式,在focus状态或值不为空的情况下,样式发生变化,如下但是浏览器存在表单自动回填,自动回填不会触发focus,同时自测获取表单值也获取不到(这个也是纳闷,设置延迟定时器去获取也取不到),造成表单样式跟内容贴合在一起,只有点击页面任何地方,才会触发样式的正常展示。 在google登录页也会出现自动回填后,页面样式的问题,需要点击一下页面,表单提示才会上移露出表单回填账号想要一进页面就调用表单元素的focus方法,但是在chorme或隐式模式下,随机生效,找到一些原因:比如: 打开浏览器的devtool情况下,该方法就是不生效,参考 (测试了下还真是,但是每次表现也不一致,不确定),这个在前端开发时候,谁能想到这个啊,fuck,坑死了。鉴于以上,改用html5的autofocus, 又遇到问题了 autofocus不生效url携带#hash,则标签设置autofocus不会生效,浏览器已经给出提示:Autofocus processing was blocked because a document already has a focused element.解决办法:调用表单元素的focus方法,更多参考。 又回到focus方法了,闹这玩呢!