serializeArray()在ajax表单提交时候非常方便获取元素

定义和用法

serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。

您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身。

语法

$(selector).serializeArray()

返回的 JSON 对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对 —— name 参数和 value 参数(如果 value 不为空的话)。举例来说:

[
{name: 'firstname', value: 'Hello'},
{name: 'lastname', value: 'World'},
{name: 'alias'}, // 值为空
]

在from表单外的值也可以通过push添加name,value

var formdata = $("#viewpoint").serializeArray();
var content = {};
var html = $("#detail_desc").val();
content['name'] = 'content';
content['value'] = html;
formdata.push(content);

.serializeArray() 方法使用了 W3C 关于 successful controls(有效控件) 的标准来检测哪些元素应当包括在内。特别说明,元素不能被禁用(禁用的元素不会被包括在内),并且元素应当有含有 name 属性。提交按钮的值也不会被序列化。文件选择元素的数据也不会被序列化。

该方法可以对已选择单独表单元素的对象进行操作,比如 <input>, <textarea>, 和 <select>。不过,更方便的方法是,直接选择 <form> 标签自身来进行序列化操作。

实例thinkphp6的前端

  1 <link rel="stylesheet" href="{$static}/css/managenment.css?version={$version}">
2
3 <link rel="stylesheet" type="text/css" href="{$static}/css/private.css?version={$version}">
4 <!-- 导航 -->
5 <div class="managenment">
6 {include file="manager/menu"}
7 <div class='release-right'>
8 <p class='release-right-title'>发布观点</p>
9 <div class='release-right-edit'>
10 <form id="viewpoint">
11 <table class='tables'>
12 <tr>
13 <td>标题</td>
14 <td><input type="text" placeholder='请输入标题,字数不能大于50字' name="name"></td>
15 </tr>
16 <tr>
17 <td>简介</td>
18 <td><textarea name="desc" placeholder="请输入简介,字数不能大于70字"></textarea></td>
19 </tr>
20 <tr>
21 <td>封面</td>
22 <td class='covers'>
23 <img class="file gradient" src="{$static}/images/shangchuan.jpg" onclick="startFile()"
24 id="img">
25 <input type="file" id="selectFile" onchange="uploadFile(this)" style="display: none;">
26 <p>尺寸:480*360 jpg / png格式</p>
27 </td>
28 </tr>
29 <input type="hidden" id="showImageValue" name="image" value="">
30 <tr>
31 <td><span class='eqs'>来源方式</span></td>
32 <td>
33 <div class="radio ralai">
34 <input type="radio" id='ids' name="source" class='inputss' value="0" checked="checked">
35 <label class='inputLable active' for='ids'>自创</label>
36 </div>
37 <div class="radio ralai">
38 <input type="radio" id='securities' name="source" class='inputss' value="1">
39 <label class='inputLable' for='securities'>其它</label>
40 </div>
41 </td>
42 </tr>
43 <tr>
44 <td>来源名称</td>
45 <td><input type="text" placeholder='请输入来源名称,字数不能大于50字' name="source_title"></td>
46 </tr>
47 <tr>
48 <td>评论权限</td>
49 <td>
50 <div class="radio" onclick="radioClick(this)">
51 <input type="radio" name="comment_status" value="1" checked class="inputss">
52 <label class="inputLable active">允许</label>
53 </div>
54 <div class="radio" onclick="radioClick(this)">
55 <input type="radio" name="comment_status" value="0" class="inputss">
56 <label class="inputLable">关闭</label>
57 </div>
58 </td>
59 </tr>
60 <tr>
61 <td>分类</td>
62 <td>
63 <select name="cate_id">
64 <option value="">请选择分类</option>
65 {foreach $type as $t}
66 <option value="{$t.id}">{$t.title}</option>
67 {/foreach}
68 </select>
69 </td>
70 </tr>
71 <tr>
72 <td style='vertical-align: top;'>标签</td>
73 <td class='lable-th'>
74 {foreach $tag as $tg}
75 <div class='checkeds'>
76 <input type="checkbox" class='inputss' id='ids_{$tg.id}' value="{$tg.id}" name="tags[]">
77 <label for="ids_{$tg.id}">{$tg.title}</label>
78 </div>
79 {/foreach}
80 </td>
81 </tr>
82 </table>
83 <div class='release-cont'>
84 <span>内容</span>
85 <textarea id="detail_desc" name="content" lay-verify="content"></textarea>
86 </div>
87 <div class='btnss'>
88 <div class='btns-lt' onclick="submitData(0)">发布</div>
89 <div class='btns-rt' onclick="submitData(-1)">保存到草稿箱</div>
90 </div>
91 </form>
92
93 </div>
94 </div>
95 <div class='clear'></div>
96 </div>
97 </body>
98 <script src="{$static}/js/main.js?version={$version}"></script>
99 <script>
100 var editor;
101 var html;
102 KindEditor.ready(function (K) {
103 editor = K.create('#detail_desc', {
104 width : '700px',
105 height:'401px',
106 });
107 });
108 $(function () {
109 $(".radio").click(function () {
110 var num = $(".radio").index(this);
111 $(this).children("label").addClass("active").parent(".radio").siblings().children('label').removeClass("active");
112 $(".lables").eq(num).removeClass("clas").siblings().addClass('clas');
113
114 });
115 $(".lable-th label").click(function () {
116 var index = $(this).index();
117 if ($(this).hasClass('active')) {
118 $(this).removeClass('active');
119 $(this).children('img').remove();
120 } else {
121 $(this).addClass('active').append("<img src='{$static}/images/biaoqian-icon.png'>");
122 }
123 })
124 })
125
126 function submitData(type) {
127 editor.sync();
128 var formdata = $("#viewpoint").serializeArray();
129 if (type == 0){
130 var backVal = checkdata(formdata);
131 if (!backVal) {
132 return false;
133 }
134 }
135 var content = {};
136 var submit_type = {};
137 var html = $("#detail_desc").val();
138 submit_type['name'] = 'submit_type';
139 submit_type['value'] = type;
140 content['name'] = 'content';
141 content['value'] = html;
142 formdata.push(content);
143 formdata.push(submit_type);
144 $.post("/viewpoint/create", formdata, function (result) {
145 if (result.code == 200) {
146 if (type == -1){
147 showTips("保存成功");
148 }else{
149 showTips("发布成功");
150 }
151 setTimeout(function (){location.reload();},100)
152 } else {
153 showTips(result.msg);
154 }
155 });
156 }
157
158 function startFile() {
159 $("#selectFile").click();
160 }
161
162 function uploadFile(file) {
163 var formData = new FormData();
164 formData.append("file", file.files[0]);
165 console.log(formData);
166 $.ajax({
167 url: '/upload/image',
168 dataType: 'json',
169 type: 'POST',
170 data: formData,
171 processData: false, // 使数据不做处理
172 contentType: false, // 不要设置Content-Type请求头
173 success: function (result) {
174 if (result.code == 200) {
175 $("#img").attr("src", result.data.src);
176 $("#showImageValue").val(result.data.src);
177 } else {
178 showTips(result.msg);
179 }
180 },
181 error: function (response) {
182 showTips(response.message);
183 isUpload = false;
184 },
185 });
186 }
187
188 function checkdata(data) {
189 var values = [];
190 for (var property in data) {
191 values[data[property]['name']] = data[property]['value'];
192 }
193 if (values['name'] == '') {
194 showTips("请填写观点标题")
195 return false;
196 }
197 if (!values['desc']) {
198 showTips('请填写观点简介');
199 return false;
200 }
201 if (values['cate_id'] == '') {
202 showTips('请选择观点分类');
203 return false;
204 }
205 if (values['tags[]'] == '') {
206 showTips('请选择观点标签');
207 return false;
208 }
209 if (values['content'] == '') {
210 showTips('请填写观点内容');
211 return false;
212 }
213 return true;
214 }
215 </script>
216 </html>

jQuery ajax - serializeArray() 方法 实例表单提交的更多相关文章

  1. jQuery ajax - serializeArray() 方法

    定义和用法 serializeArray() 方法通过序列化表单值来创建对象数组(名称和值). 您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身. ...

  2. 不使用Ajax,如何实现表单提交不刷新页面

    不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...

  3. jqPaginator分页(ajax用法和form表单提交用法)

    一般使用方法 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  4. Jquery添加元素append及阻止表单提交submit

    HTML代码: <td><input name="duration[]" value="" type="text" /&g ...

  5. jquery ajax 的data 存表单的值

    jsp <body> <form action="" method="post" id="formid">  < ...

  6. Jquery.serializeArray()可看表单提交内容

  7. ajax请求与form表单提交共存的时候status为canceled

    chrome浏览器调试,发现,status竟然是canceled状态 网上总论: 1.在URL变更后,会对当前正在执行的ajax进求进行中止操作.中止后该请求的状态码将为canceled 2.在使用到 ...

  8. 浏览器下载/导出文件 及jQuery表单提交

    1 比如以下按钮, 用于导出文件,如EXCEL文件. <li> <button class="whiteBg btn2" onclick="doExp( ...

  9. 使用jQuery,实现完美的表单异步提交

    jQuery异步提交表单 <form id="form1" method="post"> <table border="1" ...

  10. MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求

    假如有一个数据表格UserInfo: public class UserInfo { public int Id { get; set; } public string Name { get; set ...

随机推荐

  1. JDBC后端实现登录的逻辑

    // 包名 package com.zhulx.JDBC; // 导入实例类 import com.zhulx.pojo.Account; import java.sql.Connection; im ...

  2. Transformer的Pytorch实现【1】

    使用Pytorch手把手搭建一个Transformer网络结构并完成一个小型翻译任务. 首先,对Transformer结构进行拆解,Transformer由编码器和解码器(Encoder-Decode ...

  3. 实战!oracle 11g一键安装脚本分享

    分享一个常用的数据库一键安装脚本,大家可以从我的网盘进行下载 链接: https://pan.baidu.com/s/1iV-0zeXrwhJxJcm9qA_P_g 提取码: apbc 脚本内容: # ...

  4. CSP模拟 小 trick 总结 (持续施工中)

    虽然这篇博客来的有点晚,但还是写了,欢迎dalao补充( (很杂,建议先浏览目录) 1.分块.莫队有关: \(\color{brown}(1)一个真正的回滚莫队(感谢\ Qyun\ 的讲解):\) $ ...

  5. 云原生周刊:K8s 上的 gRPC 名称解析和负载平衡

    开源项目推荐 Kraken Kraken 是一个基于 P2P 的 Docker 注册表,专注于可扩展性和可用性.它专为混合云环境中的 Docker 镜像管理.复制和分发而设计.借助可插拔的后端支持,K ...

  6. 云原生周刊 | 使用 K8s 可视化工具集来调试业务 | 2023-1-30

    开源项目推荐 k8z k8z 意在 K8s 业务层面,提供一个方便好用的 K8s 集群可视化工具集.目前包含以下功能: 终端:连接到集群任意 Pod 容器上,方便调试 Tcpdump:对集群内容器进行 ...

  7. PHP、JS、css、python、mysql 基本常用函数特殊方法记录

    html <a draggable="false">禁止拖拽</a> css .nowrap{word-break:keep-all;white-space ...

  8. AvaloniaUI项目离线开发全攻略:IDE安装、模板应用与NuGet私有化部署一站式解决

    1. 引言 在网络受限或完全离线的环境中开发.NET项目(本文示例为Avalonia UI项目),可能会遇到一些挑战.本文将为您提供一套完整的离线开发解决方案,包括IDE的安装.Avalonia UI ...

  9. 每日学学Java开发规范,编程规约(附阿里巴巴Java开发手册(终极版))

    前言 每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量. 想细看的可以去 ...

  10. Java创建数组、赋值的四种方式,声明+创建+初始化 详解

    @ 目录 一.创建数组的四种方式 二.详解 三.数组存储的弊端 一.创建数组的四种方式 以int数据类型为例 @Test public void testNewArray() { //创建数组 //法 ...