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高级程序设计之表单基础相关推荐

  1. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  2. 前端红宝书《JavaScript高级程序设计》核心知识总结

    此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...

  3. javascript高级程序设计pdf_一个老牌程序员推荐的JavaScript的书籍,看了真的不后悔!...

    很多人问我怎么学前端?我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量 ...

  4. 一行python代码画粑粑_如何阅读《JavaScript高级程序设计》(一)

    题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...

  5. 计算机高级程序开发,2017计算机javascript高级程序设计简介

    2017计算机javascript高级程序设计简介 在JavaScript面世之初,没有人会想到它会被应用的如此广泛,也远比一般人想象中的要复杂强大的多.下面小编整理的关于计算机javascript高 ...

  6. 《JavaScript 高级程序设计》

    第 3 章 基本概念 3.5.2 位操作符 ECMAScript 中所有数值都是以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值.而是先将 64 位的值转换成 32 位的整 ...

  7. 你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?

    参考博客原址:https://www.cnblogs.com/tonykair/p/7502276.html 你是怎么看完<JavaScript权威指南><JavaScript高级程 ...

  8. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  9. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  10. 《JavaScript高级程序设计》(第2版)上市

      本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...

最新文章

  1. mongodb的聚合操作
  2. 动态创建DeepZoom
  3. JS技巧:兼容性导出表格为Excel文件
  4. 某网站高度加密混淆的javascript的分析
  5. 5.4. Interaction Between Devices and Kernel 设备与内核的交互
  6. Asterisk文件目录
  7. 物理不突出能学计算机吗,物理成绩不突出,高中选科怎么办?3个理由让你解除后顾之忧!...
  8. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.22. 子查询表达式
  9. [shell][001] [advanced]定制化自己的shell命令
  10. 细聊分布式ID生成方法-2
  11. JDK自带的Timer类
  12. 百度网盘资源搜索网站大全
  13. Spring 菜鸟教程 IntrospectorCleanupListener
  14. js分页插件:首页,上页,快退,页码,快进,下页末页,跳转,使用模板,灵活自由
  15. diy计算机组装注意事项,电脑DIY常见误区有哪些 电脑组装新手注意事项
  16. Prompt+对比学习,更好地学习句子表征
  17. C/C++面试题-2 之2/2
  18. 看这你已经赢麻了,勿以赢小而不麻,2022软件测试八股文最全音
  19. 华为鸿蒙系统老手机能用吗_华为鸿蒙系统是否用于手机还未确定 华为手机还会继续用安卓系统吗...
  20. FFmpeg解码视频帧为jpg图片保存到本地

热门文章

  1. ftp服务器文件不显示,ftp服务器不显示文件夹大小
  2. 【公开课报名】腾讯产品经理教你如何用好腾讯会议
  3. Win11怎么加入工作组?Win11加入局域网工作组的方法
  4. sql server备份及导出表数据和结构
  5. 【Python】《三国演义》人物出场统计
  6. 风压和功率计算公式轴流式_离心风机风压计算
  7. python表单数据系统_python 网页提交表单数据库
  8. 小案例:王者荣耀战力查询系统(免费调用外部接口
  9. 西门子840d备份到u盘_西门子840D数控系统备份及恢复方法(三)
  10. 笔记本双显卡,NVIDA驱动,Manjaro 双屏