Zepto源码分析-form模块

时间:2023-02-19 22:27:45

源码注释

//     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模块的更多相关文章

  1. 读Zepto源码之Form模块

    Form 模块处理的是表单提交.表单提交包含两部分,一部分是格式化表单数据,另一部分是触发 submit 事件,提交表单. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

  2. zepto源码分析·ajax模块

    准备知识 在看ajax实现的时候,如果对ajax技术知识不是很懂的话,可以参看下ajax基础,以便读分析时不会那么迷糊 全局ajax事件 默认$.ajaxSettings设置中的global为true ...

  3. zepto源码分析·core模块

    准备说明 该模块定义了库的原型链结构,生成了Zepto变量,并将其以'Zepto'和'$'的名字注册到了window,然后开始了其它模块的拓展实现. 模块内部除了对选择器和zepto对象的实现,就是一 ...

  4. Zepto源码分析-ajax模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  5. zepto源码分析·event模块

    准备知识 事件的本质就是发布/订阅模式,dom事件也不例外:先简单说明下发布/订阅模式,dom事件api和兼容性 发布/订阅模式 所谓发布/订阅模式,用一个形象的比喻就是买房的人订阅楼房消息,售楼处发 ...

  6. Zepto源码分析-deferred模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  7. Zepto源码分析-event模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  8. Zepto源码分析-callbacks模块

    // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT licens ...

  9. zepto源码分析系列

    如果你也开发移动端web,如果你也用zepto,应该值得你看看.有问题请留言. Zepto源码分析-架构 Zepto源码分析-zepto(DOM)模块 Zepto源码分析-callbacks模块 Ze ...

随机推荐

  1. Yii;CodeIgniter;thinkphp学习

    http://www.ibm.com/developerworks/cn/opensource/os-cn-yii/ http://codeigniter.org.cn/ http://baike.b ...

  2. 抽取的BaseFragment和LoadingPage

    [BaseFragment]: public abstract class BaseFragment extends Fragment { /*★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ...

  3. MY_FIRSH_MODULE

    模块描述 将30个字节的内存空间模仿成设备文件.每次读写不超过30个字节. 模块加载成功之后,需建立设备文件 mknod /dev/mydev c 231 0 模块代码 #include <li ...

  4. JSP 服务器响应

    Response响应对象主要将JSP容器处理后的结果传回到客户端.可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie.HTTP文件头信息等. 一个典型的响应看起来就像下面 ...

  5. 由sqlite在手机的内存位置,引起onCreate当运行总结

    转载请注明出处.谢谢:http://blog.csdn.net/harryweasley/article/details/46467495 我们都知道,android为了操作数据库,通常是继承SQLi ...

  6. LinkedHashMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...

  7. 安卓开发:UI组件-图片控件ImageView(使用Glide)和ScrollView

    2.7ImageView 2.7.1插入本地图片 一个图片控件,可以用来显示本地和网络图片. 在首页添加按钮ImageView,指向新页面(步骤与前同,不再详写). activity_image_vi ...

  8. Elasticsearch-基础介绍及索引原理分析

    介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...

  9. 分布式监控系统Zabbix-3&period;0&period;3-完整安装记录

    由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这种方式!这里,针对zabbix报警信息的发送,可以采用下面两种方式中的任意一种:1)利用sendEmail程序来发送报警邮件. ...

  10. &lbrack;HNOI2011&rsqb;数学作业 --- 矩阵优化

    [HNOI2011]数学作业 题目描述: 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算\(Concatenate(1..N)\; Mod\; ...