世上没有最聪明的人,只有最懒的人,分享一个表单数据序列化为json数据,通过ajax提交数据就不用一个一个的去获取值了,用下面的方法一键取值,懒人必备利器
$.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;
};
有了这个方法后获取表单数据就很简单了,如下:
var formdata = $("#formData").serializeObject();
控制台打印输出结果值:
console.log(JSON.stringify(formdata));
formdata得到的就是最终转为json数据的结果值,也就是最后ajax提交的数据,formDate就是form表单的id值,使用该方法提交数据需要给提交按钮加上监听事件,为了使用ajax提交表单数据,监听事件最后加上一个返回值,避免表单提交跳转
return false
分享一下我的例值,使用了layui框架:
//监听提交按钮-页面对应按钮<button lay-submit="" lay-filter="demo" class="layui-btn">提交</button>
form.on("submit(demo)",function (data) {
layer.msg('确定提交?',{
time: 20000, //20s后自动关闭
btn: ['确定', '取消'],
icon:0,
yes:function (index) {
//获取form表单数据
var formdata = $("#formData").serializeObject();
var stringJson = JSON.stringify(formdata);
console.log(stringJson)
$.post('地址',formdata,function (data) {
if (data.result==1){
layer.msg("提交成功",{
icon:1,
time:1000,
});
setTimeout(function () {
//获得当前窗口索引
var index=parent.layer.getFrameIndex(window.name);
//调用父类关闭窗口方法
parent.layer.close(index);
},1000)
} else {
layer.msg("提交失败",{
icon:0,
time:1000,
});
}
});
form.render();
layer.close(index)
}
});
return false;//防止表单数据提交页面跳转
});