javascript - 转换 JSON 数据并在复选框、文本、下拉或单选输入类型中实现值的最佳方法?

标签 javascript jquery json

我正在尝试为我的单页应用程序找到最有效和通用的解决方案。有 5 个不同的选项卡。每个选项卡都在 JSON 对象中加载数据。用户单击选项卡后,JSON 数据就会使用唯一键填充到对象中。如果用户单击“编辑”按钮,我将循环遍历 JSON 数据并填充表单字段。这是我的问题,我的表单上有复选框、单选、文本和下拉菜单字段。每种数据类型需要不同的数据类型。我的 JSON 对象中的数据未转换为复选框或单选类型输入字段。我想知道解决这个问题的最佳方法是什么?

这是我的 JSON 数据的示例:

var jsonData = {
   "frmTab1":{"st_fname":"mike","st_lname":"cook","st_iseligible":"yes"},
   "frmTab2":{"sa_condition":"yes","sa_evaluation":"no"},
   "frmTab3":{"se_respons":"yes","se_option":"3"},
   ... and so on
}

这是我的 JQuery 函数,用于填充表单:

$('input[name="hmButton"]').on('click', function formSubmit(){
    var btnVal = $(this).val();

    if(btnVal == 'Edit'){
        var jsonKey = $(this).attr('data-json'); //In data json is from id value

        if($.isEmptyObject(jsonData[jsonKey])){
            console.log('no data');
        }else{
            $.each(jsonData[jsonKey], function(index, element) {
                //Here I need to check the input type and set checked if type is checkbox, or value if it's radio type, and same thing for drop down.
                $('#frm' + index).val(element); 
            });
        }
    }
});

我想知道是否可以使用另一个 JSON 对象来完成此操作,该对象将具有输入类型不等于文本的每个字段的键。如果有人可以提供帮助,请告诉我。我正在努力让这个充满活力。这可能会在我的应用程序的其他情况下使用。谢谢。

最佳答案

这个...

var jsonData = {
    'frmTab1': {
        'st_fname': 'mike',
        'st_lname': 'cook',
        'st_iseligible': 'yes'
    },
    'frmTab2': {
        'sa_condition': 'yes',
        'sa_evaluation': 'no'
    },
    'frmTab3': {
        'se_respons': 'yes',
        'se_option': '3'
    }
}

...是一个 JavaScript 对象。 JSON 是一种基于文本的数据交换格式,尽管它是用 JavaScript Object Notation(因此是 JSON)尽量避免将 JavaScript Object 与 JSON 数据混淆。现在这已经不成问题了...:)

虽然 JSON 键必须在引号(“...”)之间定义,只要 JavaScript 对象中的键遵守通常的语法要求,则可以省去键的引号...

var jsonData = {
    frmTab1: {
        st_fname: 'mike',
        st_lname: 'cook',
        st_iseligible: 'yes'
    },
    frmTab2: {
        sa_condition: 'yes',
        sa_evaluation: 'no'
    },
    frmTab3: {
        se_respons: 'yes',
        se_option: '3'
    }
};

您建议引用另一个对象,该对象充当填充页面的函数和 jsonData 变量中的信息之间的中介,这是可行的 - 也许是这样的......

var dataMap = {
    waypoint_1: jsonData.frmTab1,
    waypoint_2: jsonData.frmTab2,
    waypoint_3: jsonData.frmTab3
    /* ... etc ... */
};

我在这里所说的“waypoint_n”将反射(reflect)您期望从页面元素属性中检索的属性/字符串 - 因此类似于...

var dKey = /* attribute value or property (String) */
var data = dataMap[ dKey ];

...然后将 jsonData 对象中的所需信息放入 data 变量中。

但是,由于您已经在对象 (jsonData) 中拥有此信息,为什么不简单地修改其键以反射(reflect)您期望的属性值呢?

您可能会发现这些链接很有用:

关于javascript - 转换 JSON 数据并在复选框、文本、下拉或单选输入类型中实现值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810524/

相关文章:

jquery - 如何使用 jquery 触发 <input type ="file"> 元素

java - 如何使用 gson 将此 json String 转换为普通的 java arraylist

json - 将变量从 ARM 模板传递到 PowerShell

javascript - d3.js slider : how to get value?

javascript - 可观察到返回错误,但请求数据正常返回

jquery - 使用 JQuery 解析 XML

jQuery 移动 : filtering nested lists

javascript - 单击 RXjs 按钮未得到服务器响应

javascript - 如何通过JavaScript显示德语变音字符?

javascript - 我正在与 requirejs 优化器和非 AMD 模块作斗争