javascript - 从表单输入生成对象

标签 javascript html angularjs forms input

这是我的代码:

<form class="form-group" id="formAdd">
        <table class="table table-striped table-condensed table-bordered table-overflow">
            <thead>
                <tr>
                    <th style="text-align:center" width="33%">Track</th>
                    <th style="text-align:center" width="33%">Category</th>
                    <th style="text-align:center" width="33%">Skills</th>
                </tr>
            </thead>
            <tbody id="categoryContainer">
                <tr>
                    <td id="trackContainer" rowspan="1" width="33%">
                        <input type="text" class="form-control" style="max-width: none;" name="track" ng-model="addTCS.track" />
                    </td>
                    <td colspan="2">
                        <table class="borderless" style="width: 100%;">
                            <tbody>
                                <tr>
                                    <td width="50%" style="padding:0 8px 0 0;vertical-align:top;position:relative;">
                                        <div class="form-group">
                                            <input type="text" class="form-control category" style="max-width: none;" name="category[0]" id="category[0]" data-category-index="0"/>
                                        </div>
                                        <small style="position:absolute;bottom:0;right:8px;"><a href="" class="text-primary pull-right category-add" ng-click="addTCS.addCategory($event)">+ Add Category</a></small>
                                    </td>
                                    <td width="50%" style="padding:0 0 0 8px;vertical-align:top;">
                                        <div class="skillContainer">
                                            <div class="form-group">
                                                <input type="text" class="form-control skill" style="max-width: none;" name="category[0].skill[0]" id="category[0].skill[0]" data-category-index="0" data-skill-index="0"/>
                                            </div>
                                        </div>
                                        <small><a href="" class="text-primary pull-right" ng-click="addTCS.addSkill($event)">+ Add Skill</a></small>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td colspan="3"><cite>Note: All text fields are required.</cite></td>
                </tr>
            </tfoot>
        </table>
        <div class="form-group text-center">
            <button class="btn btn-primary btn-md" type="button" ng-click="addTCS.cancel()">Cancel</button>
            <button class="btn btn-success btn-md" type="button" ng-click="addTCS.submit()" ng-disabled="addTCS.formAdd.$invalid">Submit</button>
        </div>
    </form>

HTML 输出的示例屏幕截图

enter image description here

现在我想为以下输出创建一个对象。 Track 只有一个,但一个 Track 可以有多个 Category,每个 Category 可以有多个 Skills

我想输出像这样的对象

Object >
    track: "track1",
    category :{
       category1: {
           0: "skill1 for category1"
           1: "skill2 for category1"
       },
       category2: {
           0: "skill1 for category2"
           1: "skill2 for category2"
           2: "skill3 for category2"
       }
    }

注意:我添加 data-category-index 表示该类别所在的行,并添加 data-skill-index 表示该类别中的技能数量

最佳答案

找到答案了。我希望这也能对某人有所帮助

vm.submit = function () {
    var tcs = {};
    var category = {};

    var cIndexPrev;
    var categoryTemp;
    var skills = [];
    var element = document.querySelectorAll("#formAdd input");
    element.forEach(function (elem) {
        var categoryIndex = elem.dataset.categoryIndex;
        var skillIndex = elem.dataset.skillIndex;

        if (categoryIndex == undefined && skillIndex == undefined) {
            tcs["track"] = elem.value;
        } else if (categoryIndex != undefined && skillIndex == undefined) {
            if (cIndexPrev == undefined) {
                cIndexPrev = categoryIndex;
            } else if (cIndexPrev !== categoryIndex) {
                category[categoryTemp] = { skills: skills };
                cIndexPrev = categoryIndex;
                skills = [];
            }
            categoryTemp = elem.value;
        } else if (categoryIndex != undefined && skillIndex != undefined) {
            skills.push(elem.value);
        }
    });
    if (skills.length > 0) {
        category[categoryTemp] = { skills: skills };
    }
    tcs["category"] = category;
};

关于javascript - 从表单输入生成对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41606673/

相关文章:

javascript - Jquery ajax 响应似乎忽略类

c# - 如何在 MVC 5 中的 Bootstrap 3 导航中将链接左右对齐

jquery - 如何使用CSS设置输入类型文件的样式

javascript - 拖动父项,但选择子项上的文本?

javascript - Angular JS - 如何将 JSON 值转换为 JSON 键?

javascript - iOS7 Safari 手机| Html 视频流 |未触发结束事件

javascript - 无法使用 Bootstrap slider 更改不透明度值

angularjs - 检查 ng-repeat 和 $http 中的值将其发布 AngularJs

angularjs - AngularJS 中的 $http 上传文件进度

javascript - 单击主体上的任意位置即可执行功能 : directive