我见过这种将表单序列化为JSON的方法,效果很好。我的问题是:我怎样才能不使用任何jQuery代码而使用纯JavaScript实现这一点呢?如果这个问题很愚蠢,我很抱歉,但我仍在学习中,所以如果有人能帮助我,我将不胜感激。
(function ($) {
$.fn.serializeFormJSON = function () {
var objects = {};
var anArray = this.serializeArray();
$.each(anArray, function () {
if (objects[this.name]) {
if (!objects[this.name].push) {
objects[this.name] = [objects[this.name]];
}
objects[this.name].push(this.value || '');
} else {
objects[this.name] = this.value || '';
}
});
return objects;
};
})(jQuery);
$('form').submit(function (e) {
e.preventDefault();
var data = $(this).serializeFormJSON();
console.log(data);
/* Object
email: "value"
name: "value"
password: "value"
*/
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post">
<div>
<label for="name">Name</label>
<input type="text" name="name" id="name" />
</div>
<div>
<label for="email">Email</label>
<input type="text" name="email" id="email" />
</div>
<div>
<label for="password">Password</label>
<input type="password" name="password" id="password" />
</div>
<p>
<input type="submit" value="Send" />
</p>
</form>
另外,在jQuery中,这是将用户输入的多个JSON对象作为一个字符串发送的正确方法吗?因为我正在寻找这样做的方法。
4条答案
按热度按时间jxct1oxe1#
你可以试试这样的方法:
这个解决方案只有在页面上只有一个表单时才有效,为了使它更通用,函数可以将表单元素作为参数。
xfb7svmp2#
您可以使用Array.reduce,类似于
bogh5gae3#
请记住,对于复选框,value属性可以是
on
或off
字符串。这是不需要的。下面是我的解决方案,基于this codepen。或
OR(带 typescript )
iq0todco4#
要序列化您的
form
,您可以这样做(注意,我在form
标记中添加了一个onsubmit
):HTML和JavaScript:
然后,您可以对
objSerializedForm
执行任何您想要的操作,通过调用objSerializedForm.name
获取每个值。