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.提交编码后的数据。

关于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) {}
})
});

JavaScript高级程序设计之表单基础

时间: 2024-10-16 17:27:40

JavaScript高级程序设计之表单基础的相关文章

《JAVASCRIPT高级程序设计》表单基础知识和文本框脚本

在HTML中,表单是由<form>元素来表示,在javascript中,表单对应的是HTMLFormElement类型,它具有一些独有的属性和方法: 一.表单基础知识 1.取得表单的方式 var form = document.getElementById("form1");//取得页面中id=form1的元素 var form1 = document.forms[0];//取得页面中的第一个表单 var myform = document.forms["myFo

JavaScript 高级程序设计 学习笔记 1 基础类型。

/************************************************************************************************************* * @第二章 在HTML 中使用Javascript */<script> 标签属性 async 可选:表示立即下载脚本,但不妨碍页面中的其他操作,只对外部文件有效. defer 可选:表示脚本可以延迟都文档完全被解析和显示之后再执行,只对外部文件有效. src 可选:表示包

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

《JavaScript高级程序设计》Chapter 14 表单脚本

之前就提到了,JS创建之初是为了减少服务器的压力,而当时这个压力主要体现在表单的验证上.与此同时,JS还为WEB表单增加了一些行为. 表单基础知识 go 文本框脚本 go 选择框脚本 go 表单序列化 go 富文本编辑 go JS表单基础知识 JS中获取表单元素(<form>)的方法: 通过id(所有元素通用)getElementById(""); 通过document.form:document.forms[0] 或者 document.forms["formN

JavaScript高级程序设计52.pdf

表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HTML元素相同的默认属性,HTMLFormElement也有它自己独有的属性和方法 acceptCharset:服务器能够处理的字符集:等价于HTML中accept-charset特性 action:接受请求的URL:等价于HTML的action特性 elements:表单中所有控件的集合(HTMLCollec

《JavaScript高级程序设计》学习笔记12篇

写在前面: 这12篇博文不是给人看的,而是用来查的,忘记了什么基础知识,点开页面Ctrl + F关键字就好了 P.S.如果在对应分类里没有找到,麻烦告诉我,以便尽快添上.当然,我也会时不时地添点遗漏的东西进去 目录 JS学习笔记1_基础与常识 JS学习笔记2_面向对象 JS学习笔记3_函数表达式 JS学习笔记4_BOM JS学习笔记5_DOM JS学习笔记6_事件 JS学习笔记7_表单脚本 JS学习笔记8_错误处理 JS学习笔记9_JSON JS学习笔记10_Ajax JS学习笔记11_高级技巧

《JavaScript高级程序设计》读书笔记--前言

起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的javascript书籍和推荐的阅读顺序,如下所示: 从头到尾对一遍<<Javascript高级程序设计>>,不懂的地方可以暂时掠过,给自己对javascript有一个大体的印象 认认真真的读完这本书:<<编写可维护的javascript>>,从编码规范,技巧,

《JavaScript 高级程序设计》

因为曾经在高中买来<C Primer Plus>和大学买来的<Clean Code>(挑战自己买的英文版的结果就啃了一点)给我一种经典的书都特别厚的一本就够读大半年的感觉.加上刚上大学图便宜买的有关做网站的旧书(应该是 Table 布局和 Dreamweaver 比较火的时代的书,这些书倒是很薄)让我一度认为做网页不就是 table 然后 tr.td 什么的套呗,高大上点不就是 div+CSS 嘛有什么大不了,给我设计好什么网页不都 ok 能做出来么?这种感觉.然后看网络课程,在网

JavaScript高级程序设计(第3版) 中文pdf扫描版 89M 高清下载

<JavaScript高级程序设计(第3版)>是JavaScript超级畅销书的最新版.ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性. <JavaScript高级程序设计>这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一. 全书从JavaScript语言实现的各个组成部分——语言核心.DOM.BOM.事件模型讲起,深入浅出地探讨了面向对象