JavaScript高级程序设计之表单基础
A FORM
<form id='form' action='http://a-response-url' method="post"><!--maxlength 最大值 placeholder 占位符 autofocus 自动聚焦--><input type='text' name='name' size='20' maxlength='10' placeholder='initial' autofocus /><br /><input type='text' name='phone' size='3' maxlength='3' /><input type='text' name='phone' size='3' maxlength='3' /><input type='text' name='phone' size='4' maxlength='4' /><br /><!--旧版浏览器会自动设置type为text--><input type='email' name='email' required /><br /><select name='fruit'><option value='a'>apple</option><option value='b' selected>banner</option><option value='c'>color fruit</option></select><br /><textarea name='textbox' rows='5' cols='20' maxlength="50">textbox with maxlength</textarea><br /><button type='reset' id="resetBtn">reset</button><button type='submit' id="subBtn">submit</button> </form>
表单的elements属性
// 获取表单元素 var form = document.getElementById("form");// 返回表单控件的个数 var eleNum = form.elements.length;// 返回控件中name="phone"的元素 var phone = form.elements["phone"];
自动聚焦的兼容
// autofocus var autofocusEle = form.elements[0];if (autofocusEle.autofocus !== true) {autofocusEle.focus(); }
占位符的兼容
// placeholder for ie\10 with jquery if (!("placeholder" in document.createElement("input"))) {// focus and blur$("[placeholder]").on("focus", function () {if ($(this).val() === $(this).attr("placeholder")) {$(this).val("");}}).on("blur", function () {if ($(this).val() === "") {$(this).val($(this).attr("placeholder"));$(this).css("color", "graytext")}}).blur();// when submit dont send the placeholder value$("[placeholder]").parent("form").submit(function () {$(this).find("[placeholder]").each(function () {if ($(this).val() === $(this).attr("placeholder")) {$(this).val("");}});}); }
表单的自动提交:
当form中处于focus状态时(textarea除外),并且form中有type="submit"的提交按钮;那么回车就会触发表单提交事件,如同单击提交按钮,进行表单提交。
表单提交的时候发生了什么?
1、成功控件
浏览器并不是将所有的表单控件全部发送到服务器的,而是会查找所有的【成功控件】,只将这些成功控件的数据发送到服务端。
那么,什么是成功控件呢?简单说,成功控件就是:每个表单的控件都应该有一个name属性和【当前值】,在提交时,它们将以
【name=value】的形式将数据提交到服务器端,也即【action】的地址。这个算法逻辑由浏览器自身来处理。
对于一些特殊情况,成功控件还有以下规定:
a.控件不能是禁用状态,即指定【disabled="disabled"】的控件不是成功控件。
b.对于【checkbox】来说,只有被勾选的才算是成功控件。
c.对于【radio button】来说,只有被勾选的才算是成功控件。
d.对于【select】控件来说,只有被勾选的项才算是成功控件,name是select标签的属性。
e.对于【file】上传文件控件来说,如果它包含了选择文件,那么它将是成功控件。
2、提交方式
如果是【post】,那么表单数据将放在请求体中被发送出去。
如果是【get】,那么表单数据将会追加到查询字符串中,以查询字符串的形式提交到服务端。
表单通常还是以post方式提交比较好,这样可以不破坏url,况且url还有长度限制及一些安全性问题。
3、数据编码
控件输入的内容并不是直接发送的,而是经过一种编码规则来处理的。目前基本上只会使用两种编码规则:application/x-www-form-urlencoded 和 multipart/form-data
这两个规则的使用场景简单说就是:后者在上传文件时使用,其他情形则默认使用前者。
使用地点:<form action="" method="" enctype="multipart/form-data"> =>上传文件
4、浏览器提交表单时的四个阶段
a.识别所有的成功控件
b.为所有的成功控件创建一个数据集合,它们包含【control-name/current-value】这样的键值对。
c.按照【form.enctype】指定的编码规则对前面准备好的数据进行编码。编码规则放在请求中,用content-type指出。
d.提交编码后的数据。
注:表单的直接提交
// 此方式将直接触发表单的提交行为而不做任何验证 // 所以在表单验证后可直接触发此事件,直接提交表单 // (html 中不能出现id=submit的元素,否则会产生混乱!) document.getElementById("form").submit();
关于AJAX提交表单
// ajax提交表单提供了更好的可控性,示例应用了jquery $("#form").on("submit", function (e) {// 阻止浏览器的默认提交行为 e.preventDefault();$.ajax({type: "post",url: $(this).attr("action"),data: $(this).serialize(), // 模拟浏览器的成功控件刷选逻辑,搜罗键值对 (注意:name属性相同时会同时发送!这是checkbox的逻辑) // "name=%EF%BF%A5dd&phone=aa&phone=bb&phone=cc&email=kui_002%40126.com&fruit=b&textbox=textbox+with+maxlen%0D%0Agth"error: function () {},success: function (res) {}}) });
转载于:https://www.cnblogs.com/xiankui/p/3771046.html
JavaScript高级程序设计之表单基础相关推荐
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- 前端红宝书《JavaScript高级程序设计》核心知识总结
此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...
- javascript高级程序设计pdf_一个老牌程序员推荐的JavaScript的书籍,看了真的不后悔!...
很多人问我怎么学前端?我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量 ...
- 一行python代码画粑粑_如何阅读《JavaScript高级程序设计》(一)
题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...
- 计算机高级程序开发,2017计算机javascript高级程序设计简介
2017计算机javascript高级程序设计简介 在JavaScript面世之初,没有人会想到它会被应用的如此广泛,也远比一般人想象中的要复杂强大的多.下面小编整理的关于计算机javascript高 ...
- 《JavaScript 高级程序设计》
第 3 章 基本概念 3.5.2 位操作符 ECMAScript 中所有数值都是以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值.而是先将 64 位的值转换成 32 位的整 ...
- 你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?
参考博客原址:https://www.cnblogs.com/tonykair/p/7502276.html 你是怎么看完<JavaScript权威指南><JavaScript高级程 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- javascript高级程序设计学习笔记
javascript高级程序设计,当枕头书已经好久了~zz 现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...
- 《JavaScript高级程序设计》(第2版)上市
本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...
最新文章
- mongodb的聚合操作
- 动态创建DeepZoom
- JS技巧:兼容性导出表格为Excel文件
- 某网站高度加密混淆的javascript的分析
- 5.4. Interaction Between Devices and Kernel 设备与内核的交互
- Asterisk文件目录
- 物理不突出能学计算机吗,物理成绩不突出,高中选科怎么办?3个理由让你解除后顾之忧!...
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.22. 子查询表达式
- [shell][001] [advanced]定制化自己的shell命令
- 细聊分布式ID生成方法-2
- JDK自带的Timer类
- 百度网盘资源搜索网站大全
- Spring 菜鸟教程 IntrospectorCleanupListener
- js分页插件:首页,上页,快退,页码,快进,下页末页,跳转,使用模板,灵活自由
- diy计算机组装注意事项,电脑DIY常见误区有哪些 电脑组装新手注意事项
- Prompt+对比学习,更好地学习句子表征
- C/C++面试题-2 之2/2
- 看这你已经赢麻了,勿以赢小而不麻,2022软件测试八股文最全音
- 华为鸿蒙系统老手机能用吗_华为鸿蒙系统是否用于手机还未确定 华为手机还会继续用安卓系统吗...
- FFmpeg解码视频帧为jpg图片保存到本地
热门文章
- ftp服务器文件不显示,ftp服务器不显示文件夹大小
- 【公开课报名】腾讯产品经理教你如何用好腾讯会议
- Win11怎么加入工作组?Win11加入局域网工作组的方法
- sql server备份及导出表数据和结构
- 【Python】《三国演义》人物出场统计
- 风压和功率计算公式轴流式_离心风机风压计算
- python表单数据系统_python 网页提交表单数据库
- 小案例:王者荣耀战力查询系统(免费调用外部接口
- 西门子840d备份到u盘_西门子840D数控系统备份及恢复方法(三)
- 笔记本双显卡,NVIDA驱动,Manjaro 双屏