• jQuery


    将表单序列化成JSON对象,注意不管是自实现的serializeObject()还是原生的serializeArray(),所要序列化的控件都必须要有name,而不是id

    1. jQuery.prototype.serializeObject=function(){  
    2.     var obj=new Object();  
    3.     $.each(this.serializeArray(),function(index,param){  
    4.         if(!(param.name in obj)){  
    5.             obj[param.name]=param.value;  
    6.         }  
    7.     });  
    8.     return obj;  
    9. };  


    设有form中有username,password两个input,看效果

    $("form").serializeArray()

    [{"name":"username","value":""},{"name":"password","value":""}]

    $("form").serializeObject()
    {"username":"","password":""}

    serializeObject仅适用于name值不重复的情况,若name值重复,则取第一个


    20150125更新
    ===========

    + 此版本不再兼容IE8
    + 修复一个逻辑错误

    1. $.fn.serializeObject=function(){  
    2.     var hasOwnProperty=Object.prototype.hasOwnProperty;  
    3.     return this.serializeArray().reduce(function(data,pair){  
    4.         if(!hasOwnProperty.call(data,pair.name)){  
    5.             data[pair.name]=pair.value;  
    6.         }  
    7.         return data;  
    8.     },{});  
    9. };  

    另一种实现方式:

    $.fn.serializeObject = function() {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
    if (o[this.name] !== undefined) {
    if (!o[this.name].push) {
    o[this.name] = [o[this.name]];
    }
    o[this.name].push(this.value || '');
    } else {
    o[this.name] = this.value || '';
    }
    });
    return o;
    };

    在JavaScript中,可以利用表单字段的type属性,连同name和value属性一起实现对表单的序列哈。在编写代码之前,有必要搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。

    • 对表单字段的名称和值进行URL编码,使用和号(&)分割。
    • 不发送禁用的表单字段。
    • 只发送勾选的复选框和单选按钮。
    • 不发送type为“reset”和“button”的按钮。
    • 多选择框中的每个选中的值单独一个条目。
    • 在单击提交按钮提交表单的情况下,也会发送提交阿牛;否则,不发送提交按钮。也包括type为“image”的<input>元素。
    • <select>元素的值,就是选中的<option>元素的value特性的值。如果<option>元素没有value特性,则是<option>元素的文本值。

    jQuery.serializeArray() 函数详解

    serializeArray()函数用于序列化一组表单元素,将表单内容编码为一个JavaScript数组

    serializeArray()函数常用于将表单内容序列化为JSON对象,以便于被编码为JSON格式的字符串。

    该函数会将可用于提交的每个表单控件封装成一个Object对象,该对象有name和value属性,对应该表单控件的name和value属性。然后将这些Object对象封装为一个数组并返回。

    该函数不会序列化不需要提交的表单控件,这和常规的表单提交行为是一致的。例如:不在<form>标签内的表单控件不会被提交、没有name属性的表单控件不会被提交、带有disabled属性的表单控件不会被提交、没有被选中的表单控件不会被提交。

    与常规表单提交不一样的是:常规表单一般会提交带有name的按钮控件,而serializeArray()函数不会序列化带有name的按钮控件。更多详情请点击这里

    该函数属于jQuery对象(实例)。

    语法

    jQuery 1.2 新增该函数。

    jQueryObject.serializeArray( )

    返回值

    serializeArray()函数的返回值为Array类型,返回将表单元素编码后的JS数组。

    示例&说明

    请参考下面这段初始HTML代码:

    <form name="myForm" action="http://www.365mini.com" method="post">
       
    <input name="uid" type="hidden" value="1" />
       
    <input name="username" type="text" value="张三" />
       
    <input name="password" type="text" value="123456" />
       
    <select name="grade" id="grade">
           
    <option value="1">一年级</option>
           
    <option value="2">二年级</option>
           
    <option value="3" selected="selected">三年级</option>
           
    <option value="4">四年级</option>
           
    <option value="5">五年级</option>
           
    <option value="6">六年级</option>
       
    </select>
       
    <input name="sex" type="radio" checked="checked" value="1" />
       
    <input name="sex" type="radio" value="0" />
       
    <input name="hobby" type="checkbox" checked="checked" value="1" />游泳
       
    <input name="hobby" type="checkbox" checked="checked" value="2" />跑步
       
    <input name="hobby" type="checkbox" value="3" />羽毛球
       
    <input name="btn" id="btn" type="button" value="点击" />
    </form>

    对<form>元素进行序列化可以直接序列化其内部的所有表单元素。

    var formArray = $("form").serializeArray();
    /* 以下是序列化后的结果数组formArray的内容:
    [
        { name: "uid", value: "1" },
        { name: "username", value: "张三" },
        { name: "password", value: "123456" },
        { name: "grade", value: "3" },
        { name: "sex", value: "1" },
        { name: "hobby", value: "1" },
        { name: "hobby", value: "2" }
    ];
    */

    我们也可以直接对部分表单元素进行序列化。

    var result = $(":text, select, :checkbox").serializeArray();
    /* 以下是序列化后的结果数组result的内容:
    [
        { name: "username", value: "张三" },
        { name: "password", value: "123456" },
        { name: "grade", value: "3" },
        { name: "hobby", value: "1" },
        { name: "hobby", value: "2" }
    ];
    */
  • 相关阅读:
    告别ThinkPHP6的异常页面, 让我们来拥抱whoops吧
    ThinkPHP6 上传图片代码demo
    【ThinkPHP6:从TP3升级到放弃】1. 前言及准备工作
    PHP数字金额转换大写金额
    提高PHP开发效率, PhpStorm必装的几款插件
    5分钟弄懂Docker!
    GitHub 上排名前 100 的 IOS 开源库简介
    GitHub 上排名前 100 的 Android 开源库简介
    android线程消息传递机制——Looper,Handler,Message
    Android Activity:四种启动模式,Intent Flags和任务栈
  • 原文地址:https://www.cnblogs.com/itjeff/p/4609819.html
Copyright © 2020-2023  润新知