我试图匿名所有的表单输入,只保存1或0的数据输入,或不。为什么?这种形式是心理学研究的一部分,其中唯一感兴趣的是被访者是否输入了任何内容。
我设置了onsubmit = "anonymize()",并尝试了以下代码:
function anonymize() {
var formFields = ["name", "age", "location"];
formFields.forEach(loop);
function loop(field) {
if (field.value.length > 0) {
document.getElementsByName(field).value = 1;
}
}
}表格id/name是"name“、"age”、"location“。我试过“按ID获取”和“按名字获取”。我已经为每个表单输入字段设置了相同的名称和id。
有人知道我能怎么做才能让这件事奏效吗?
谢谢!
发布于 2020-06-04 10:46:04
您正在遍历字符串数组,而不是表单字段。
var formFields = ["name", "age", "location"];
formFields.forEach(loop);
function loop(field) {
console.log(field) // "name"
console.log(typeof field) // "string"
console.log(field.value) // undefined
if (field.value.length > 0) { // Error can't read length of undefined
document.getElementsByName(field).value = 1;
}
}因此,field.value.length应该给出一个错误,因为field.value是未定义的,而且字段只是一个字符串。
下面是一种使用form.elements的解决方案,它不需要您搜索DOM元素
$form.onsubmit = function anonymize (evt) {
const { elements } = evt.target
;["name", "age", "location"].forEach(name => {
elements[name].value = elements[name].value.length ? 1 : ''
})
}<form id="$form" action="https://httpbin.org/post" method="POST">
<input name="name" placeholder="Name">
<input name="age" placeholder="Age">
<input name="location" placeholder="Location">
<input name="Favorite food" placeholder="Favorite food">
<input type="submit">
</form>
发布于 2020-06-04 09:49:33
函数循环中的params字段是一个字符串,所以语句"field.value.length“没有意义
https://stackoverflow.com/questions/62191482
复制相似问题