Zepto源码分析-form模块
源码注释
// Zepto.js
// (c) 2010-2015 Thomas Fuchs
// Zepto.js may be freely distributed under the MIT license. ;(function($){ /**
* 序列表单内容为JSON数组
* 返回类似[{a1:1},{a2:2}]的数组
* @returns {Array}
*/
$.fn.serializeArray = function() {
var name, type, result = [], //{name:value}形式加入到结果数组中
add = function(value) {
//value是数组,递归添加到数组中
//注意这里的写法 value.forEach(add) 将value数组递归的每一项传入add
// 如 {a:[1,2,3]} --> [{a:1},{a:2},{a:3}]
if (value.forEach) return value.forEach(add)
result.push({ name: name, value: value })
} //
if (this[]) $.each(this[].elements, function(_, field){
type = field.type, name = field.name //排除fieldset,禁用元素,submit,reset,button,file和未被选中的radio,checkbox
//原因是这些元素不需要传递给服务器
if (name && field.nodeName.toLowerCase() != 'fieldset' &&
!field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' && ((type != 'radio' && type != 'checkbox') || field.checked)) //{name:value}形式加入到结果数组中
add($(field).val())
})
return result
} /**
* 序列表表单内容为查询字符串
* 转换成 a=1&b=2
* @returns {string}
*/
$.fn.serialize = function(){
var result = []
this.serializeArray().forEach(function(elm){
// 每个key-value,都保守URI编码
result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))
})
return result.join('&')
} /**
* 提交表单
* @param callback
* @returns {*}
*/
$.fn.submit = function(callback) {
//0 in arguments 判断是否传了回调函数
// 这里不应用bind,所有事件应该统一用on
//传了回调,就当成绑定submit事件
if ( in arguments) this.bind('submit', callback)
//没有传回调,当成直接提交
else if (this.length) {//有表单元素
var event = $.Event('submit') //第一个表单直接触发submit事件
//如果绑定过submit事件,此处会执行submit绑定函数
//注意,这里只是抛出事件,并不会提交表单
this.eq().trigger(event) //如果未阻止浏览器默认事件,调用document.forms[0].submit()执行默认处理
//document.forms[0].submit()提交表单
if (!event.isDefaultPrevented()) this.get().submit()
}
return this
} })(Zepto)
方法图

Zepto源码分析-form模块的更多相关文章
- 读Zepto源码之Form模块
Form 模块处理的是表单提交.表单提交包含两部分,一部分是格式化表单数据,另一部分是触发 submit 事件,提交表单. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...
- zepto源码分析·ajax模块
准备知识 在看ajax实现的时候,如果对ajax技术知识不是很懂的话,可以参看下ajax基础,以便读分析时不会那么迷糊 全局ajax事件 默认$.ajaxSettings设置中的global为true ...
- zepto源码分析·core模块
准备说明 该模块定义了库的原型链结构,生成了Zepto变量,并将其以'Zepto'和'$'的名字注册到了window,然后开始了其它模块的拓展实现. 模块内部除了对选择器和zepto对象的实现,就是一 ...
- Zepto源码分析-ajax模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...
- zepto源码分析·event模块
准备知识 事件的本质就是发布/订阅模式,dom事件也不例外:先简单说明下发布/订阅模式,dom事件api和兼容性 发布/订阅模式 所谓发布/订阅模式,用一个形象的比喻就是买房的人订阅楼房消息,售楼处发 ...
- Zepto源码分析-deferred模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...
- Zepto源码分析-event模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...
- Zepto源码分析-callbacks模块
// Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT licens ...
- zepto源码分析系列
如果你也开发移动端web,如果你也用zepto,应该值得你看看.有问题请留言. Zepto源码分析-架构 Zepto源码分析-zepto(DOM)模块 Zepto源码分析-callbacks模块 Ze ...
随机推荐
- Python -堆的实现
最小(大)堆是按完全二叉树的排序顺序的方式排布堆中元素的,并且满足:ai >a(2i+1) and ai>a(2i+2)( ai <a(2i+1) and ai<a(2 ...
- xLua中导出Dotween
前言 在xlua的lua脚本中使用dotween,官方的文档中有提到可以导出,但未介绍详细的步骤,相信比较多的朋友有需要,刚好项目中也在使用xlua和dotween,所以做个笔记. 基础知识: xLu ...
- 原生ajax实现http请求
1⃣️先简单了解一下HTTP协议: http是计算机通过网络进行通信的一种规则,它是一种无状态协议(不建立持久链接,直白点儿说就是请求响应完事儿之后,链接就断开) 2⃣️一个完整的http请求有 ...
- php-fpm死机解决办法,脚本后台自动重启
本人用nginx+php7搭建了一台服务器,因为请求量太大,而且php里面又有挂起的任务,导致php-fpm在高峰期的时候经常死掉,吧php-fpm的最大进程数已经改到1000了,还是吃不消,cpu也 ...
- 【正常向】CODEVS上分黄金
白银上分黄金失败=.= 在之前有很认真的写了一波排序,所以排序并不是很怂,还是那个理,现阶段学习的都是比较简单的排序,都是所谓的冒泡排序啊,桶排序这类,至于插排和选择排序,再往后又是什么快拍就很尬了. ...
- bzoj 3028: 食物 -- 母函数
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他 ...
- 使用 Python 实现命令行词典(一)
最近经常在服务器上开发,经常会遇到不认识的单词,然而 linux 下实在没有什么好用的词典,索性自己写一个好了. 词典 API 首先,Google 了一下可用的词典的 API,发现金山的 iciba ...
- CentOS 7安装Docker
在虚拟机CentOS 7上安装Docker ## 零:检查前提条件: 在Red Hat 和Red Hat系列的Linux发行版中,安装Docker所需的前提提交并不多. ### 1.内 ...
- SQL中LEFT JOIN 和 inner join 的区别
student表 sc 表 首先where条件a.Sid = b.Sid 查询 SELECT * FROM student a,sc b WHERE a.Sid = b.Sid GROUP BY a. ...
- 初识hadoop-历史及其家族(日志一)
1,书籍推荐: 2,Google技术带来的东西: 下一篇:JDK的安装级其中遇到的问题