代码实验
看得见的值不一定进入字段清单
构造表单字段清单时,控件通常需要 name。disabled 控件被排除,readonly 不会因此被排除;没有勾选的复选框也不进入清单。“查看字段清单”按钮只把本地表单数据列出来,用于核对上述 HTML 规则,不发送报名请求。
先判断
保持初始状态,构造这张报名表的字段清单时,下面哪一项完整且正确?
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>黄梅戏活动报名</title>
</head>
<body>
<form id="signup">
<p><label>昵称 <input id="alias" value="小梅"></label></p>
<p><label>活动 <input name="event" value="opera" readonly></label></p>
<p><label>地点 <input name="room" value="A208" disabled></label></p>
<label><input type="checkbox" name="interest" value="singing" checked>唱腔</label>
<label><input type="checkbox" name="interest" value="costume">服饰</label>
<button type="button" id="inspect">查看字段清单</button>
</form>
<pre id="result"></pre>
<script>
document.querySelector('#inspect').addEventListener('click', () => {
const fields = new FormData(document.querySelector('#signup'));
document.querySelector('#result').textContent =
[...fields].map(([name, value]) => name + '=' + value).join('\n');
});
</script>
</body>
</html>
再改一个条件
展开答案与分析
D。昵称只有 id,没有 name;地点被 disabled;服饰复选框没有勾选,因此这三项均被排除。活动只读但仍有 name,所以 event=opera 保留。清单由控件的名称和状态决定,不能只抄页面上所有能看见的文字。本例构造 FormData 时未手动追加字段,也未指定带 name 的提交按钮。
观察位置:运行后点击“查看字段清单”,将实际列出的字段逐项与 name、disabled、readonly 和勾选状态对照。末尾脚本只负责显示清单。