javascript中无内置表单转json方法,需手动遍历表单元素:过滤无name、disabled及非提交控件,按类型取值(text/textarea/select用value,checkbox/radio需checked,multiple select取selectedoptions),同名字段统一存为数组。

JavaScript 中没有内置的“表单转 JSON”方法,但可以通过遍历表单元素手动构建 JSON 对象。关键在于正确读取不同类型的表单控件(如 input、select、textarea、复选框、单选组),并处理空值、多选、布尔状态等细节。
获取表单元素并遍历所有可提交字段
使用 form.elements 或 form.querySelectorAll('input, select, textarea') 获取所有控件。注意过滤掉 type="button"、"submit"、"reset" 等不参与数据提交的按钮。
- 只处理有
name属性的元素(无 name 不会被提交) - 跳过
disabled元素(它们不会出现在表单提交数据中) - 对
type="checkbox"和type="radio"要判断是否被选中(checked)
按控件类型提取对应值
不同控件的取值方式不同,不能统一用 .value:
-
<input type="text">、<textarea></textarea>、<select></select>:直接用element.value -
<input type="checkbox">:若checked为true,值为element.value;否则忽略(或设为false,取决于业务逻辑) -
<input type="radio">:只取当前选中的那个(同 name 组中唯一有效) -
<select multiple></select>:用[...element.selectedOptions].map(o => o.value)获取数组
合并同名字段(如复选框组)
多个同 name 的复选框会生成一个键对应多个值,应存为数组:
- 遇到重复
name时,检查目标属性是否已存在 - 若已存在且是数组,
push新值;若已存在但不是数组,先转为数组再push - 也可统一将所有同名字段都收集为数组(更一致,适合后端接收)
一行简洁实现(推荐封装为函数)
下面是一个轻量、健壮的序列化函数示例:
function formToJSON(form) {
const json = {};
const elements = form.querySelectorAll('input, select, textarea');
elements.forEach(el => {
if (!el.name || el.disabled) return;
const { name, type, value } = el;
const isCheckbox = type === 'checkbox';
const isRadio = type === 'radio';
if (isCheckbox && !el.checked) return;
if (isRadio && !el.checked) return;
if (isCheckbox || isRadio || el.multiple) {
if (!json[name]) json[name] = [];
json[name].push(value);
} else {
json[name] = value;
}
});
return json;
}
// 使用:const data = formToJSON(document.querySelector('#myForm'));
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











