首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用输入字段的值更新JSON对象

用输入字段的值更新JSON对象
EN

Stack Overflow用户
提问于 2014-03-07 06:57:44
回答 2查看 2.2K关注 0票数 1

我已经创建了一个表来显示和更新一个JSON对象。这是该表中的两个字段。我已经将JSON路径放在name字段中。

代码语言:javascript
复制
var obj = {
        "subscription": {
            "control-data": [
                "app",
                "sp"
            ],
            "callback-url": "http://core.mbv:18080/man-notify",
            "post-notification": true
        },
        "charging-schedulers": [
            {
                "charging-scheduler-name": "fifteen-days",
            }
        ]
    }
代码语言:javascript
复制
<input type="text" name="subscription%$#^control-data%$#^0" class="inputArea" value="app" size="3">

<input type="text" name="subscription%$#^callback-url" class="inputArea" value="http://core.mbv:18080/man-notify" size="36">

在更新JSON对象时,我保留了这个路径。我已经尝试用我自己的方式来更新它。但它需要数百个密码。有没有什么简单的方法来更新那个JSON对象。

EN

回答 2

Stack Overflow用户

发布于 2014-03-07 07:34:15

更新

我注意到您不只是想获得相应的JSON值,而是希望设置值。我认为这样会更好。新jsFiddle

代码语言:javascript
复制
obj = {
    "subscription": {
        "control-data": [
            "app",
            "sp"],
            "callback-url": "http://core.mbv:18080/man-notify",
            "post-notification": true
    },
        "charging-schedulers": [{
        "charging-scheduler-name": "fifteen-days",
    }]
}

function updateJSON() {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        var q = inputs[i].name.split("%$#^");
        setValue(obj, q, inputs[i].value);
    }

    // This is the updated JSON obj
    console.log(obj);
}

function setValue(obj, q, val) {
    var sel = q.shift();
    if (typeof obj[sel] === "object" && q.length > 0) {
        setValue(obj[sel], q, val);
    } else {
        obj[sel] = val;
    }
}

HTML

代码语言:javascript
复制
<input type="text" name="subscription%$#^control-data%$#^0" class="inputArea" value="app" size="3">
<input type="text" name="subscription%$#^callback-url" class="inputArea" value="http://core.mbv:18080/man-notify" size="36">
<button id="update" onclick="updateJSON()">Update</button>

你可以这样做。假设您的输入名称与JSON对象中的结构相对应。jsFiddle

代码语言:javascript
复制
var obj = {
    "subscription": {
        "control-data": [
            "app",
            "sp"],
            "callback-url": "http://core.mbv:18080/man-notify",
            "post-notification": true
    },
        "charging-schedulers": [{
        "charging-scheduler-name": "fifteen-days",
    }]
}

var inputs = document.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
    var q= inputs[i].name.split("%$#^");
    var value = getValue(obj, q);

    // This is where you have the value for an input
    console.log("value:", value);
}

function getValue(obj, q) {
    var res = obj[q.shift()];
    if (typeof res === "object" && q.length > 0) {
        return getValue(res, q)
    } else {
        return res
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-03-07 07:08:27

您需要的函数是一种数据绑定,并且有很多现有的库可以这样做。它们允许您声明html表单字段和js变量之间的连接,并动态同步它们的值。

rivets.js似乎是一个很好的选择,您可以通过搜索js数据绑定找到更多类似的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22243600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档