javascript - 如何使用 JSON 从动态生成的表单中获取值
问题描述
我已经使用 JSON 数据创建了一个表单,但是当我尝试添加eventlisteners
到创建的元素时,我无法获取动态生成的表单的值。该表单包含基于 JSON 数据的各种输入类型。任何帮助,将不胜感激。这是我尝试创建的表格。
var data = {
"id": 6,
"form_name": "Some form",
"is_archived": false,
"form_fields": [
{
"id": "5cc318416403f",
"label": "Name",
"options": [
""
],
"required": true,
"field_type": "textbox"
},
{
"id": "5cc318416404a",
"label": "Date",
"options": [
""
],
"required": false,
"field_type": "date"
},
{
"id": "5cc318416404d",
"label": "What steps did you take?",
"options": [
"run","jump","walk"
],
"required": true,
"field_type": "checkbox"
},
{
"id": "5cc318416404f",
"label": "Contact details",
"options": [
""
],
"required": false,
"field_type": "textbox"
},
{
"id": "5cc318416406v",
"label": "Gender details",
"options": [
"Male","Female"
],
"required": false,
"field_type": "radio"
}
],
"created_on": "2019-04-26"
}
var div = $(".wrapper");
var total_fields = Object.keys(data.form_fields).length;
div.append("<h1>" + data.form_name + '</h1><hr width="70%">');
var ids = [];
for (var i = 0; i < total_fields; i++) {
//console.log(data.form_fields[i].options.length);
var form_wrapper = jQuery("<div/>", {
class: "row"
}).appendTo(".wrapper");
//form_wrapper.append("<form>");
form_wrapper.append(
'<div class="col-25"><label>' + data.form_fields[i].label + "</label></div>"
);
var type = data.form_fields[i].field_type;
if (type == "checkbox") {
if (data.form_fields[i].options.length > 1) {
for (var j = 0; j < data.form_fields[i].options.length; j++) {
form_wrapper.append(
'<div class="col-75"><input class="floatLabel" name="' +
data.form_fields[i].label +
'" id = "' +
data.form_fields[i].id +
'" type = ' +
data.form_fields[i].field_type +
">" +
data.form_fields[i].options[j] +
"</input></div>"
);
}
}
$('#'+data.form_fields[i].id).on('input', function() {
// do your stuff
console.log("changing");
});
//values.push();
}
else if (type == "textarea") {
form_wrapper.append(
'<div class="col-75"><textarea id="'+data.form_fields[i].id+'" placeholder = "' +
data.form_fields[i].label +
'"></textarea></div>'
);
//values.push($("#"+data.form_fields[i].id).val());
}
else if (type == "radio") {
var radio_value ;
if (data.form_fields[i].options.length > 1) {
for (var j = 0; j < data.form_fields[i].options.length; j++) {
form_wrapper.append(
'<div class="col-75"><input class="floatLabel" value="'+ data.form_fields[i].options[j] +'" name="' +
data.form_fields[i].label +
'" type = ' +
data.form_fields[i].field_type +
">" +
data.form_fields[i].options[j] +
"</input></div>"
);
}
}
}
else {
form_wrapper.append(
'<div class="col-75"><input class="floatLabel" required="' +
data.form_fields[i].required +
'" id = "' +
data.form_fields[i].id +
'" type = ' +
data.form_fields[i].field_type +
"></div>"
);
$('#'+data.form_fields[i].id).on('input', function() {
// do your stuff
console.log("changing");
});
}
ids.push(data.form_fields[i].id);
}
form_wrapper.append(
'<br><input type="submit" id="form_submit" class="sbutton">'
);
$('#form_submit').click(function(){
//console.the values.
});
<!DOCTYPE html>
<html>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="wrapper">
</div>
</body>
</html>
解决方案
当我做这样的事情时,我总是使用appendTo()
而不是append()
:
let $field = $('<div class="col-25"><label>' + data.form_fields[i].label + "</label></div>");
$field.on("change", function() { ... });
form_wrapper.append($field);
通过创建一个元素,$('<html>')
您可以使用新创建的元素的引用来绑定您可能喜欢的任何事件,然后您可以在您的情况下appendTo()
使用目标元素(form_wrapper
)。
推荐阅读
- android - 如何在 Firestore 中获取存储为 FieldValue 的数组中的特定元素
- swift - 用动画更改大导航栏标题
- jquery - 选择建议字段的值后,有没有办法填充输入字段?
- jquery - 用图像替换特定文本不起作用
- git - Bamboo 在 Source Code Checkout 任务中间歇性失败,并显示“不是 git 存储库(或任何父目录):.git”
- jquery - 如何限制与跨站资源关联的cookie?
- c - 在运行时加载动态库会产生不一致和意外的结果、缺少符号和空 PLT 条目。为什么?
- git - 试图从 github 中提取我得到错误远程:找不到存储库
- laravel - 如何在不需要“parent_id”的下拉选择中设置空值
- web-scraping - 如何使用 Google Sheets IMPORTXML() 使用 Xpath 识别此节点