【问题标题】:Storing HTML form input in a JS object将 HTML 表单输入存储在 JS 对象中
【发布时间】:2018-03-16 09:58:47
【问题描述】:

我知道这里有一个非常相似的问题,但我的对象层次结构与该问题中的不同。

无论如何,我想将 HTML 表单输入数据存储到我的 JavaScript 对象中。这是我的 HTML 表单代码:

<form id="newAuction">
    <input id="title" name="title" required type="text" value="" />
    <input id="edate" name="edate" required type="datetime" value=""  />
    <input id="minbid" name="minbid" required type="number" value=""  />
    <button class="btn btn-primary">Submit</button>
</form>

我想要的是获取这 3 个输入的值并将其存储在我的 JS 对象中。

我知道将数据发布到我的 API 所需的正确 JSON 格式。 (我尝试使用 POSTman 发布,我得到状态 200,所以它可以工作)。正确的格式是:

{
    "auction": {
        "Title": "Auction1",
        "EDate": "01/01/1990",
        "MinBid": 30
    },
    "productIds": [1,2,3]
}

这是我的 JS 对象的样子:

<script>
        $(document).ready(function() {

            var vm = {
                auction: {},
                productIds: []
            };

            //validation and posting to api

            var validator = $("#newAuction").validate({

               //assigning values
            vm.auction.Title = document.getElementById('title').value;
            vm.auction.MinBid = document.getElementById('minbid').value;
            vm.auction.EDate = document.getElementById('edate').value;
            vm.productIds.push(1);

                submitHandler: function () {
                    $.ajax({
                        url: "/api/newAuction",
                        method: "post",
                        data: vm
                    })
                    .done(function () {
                        toastr.success("Auction Added to the db");

                        //setting the vm to a new vm to get rid of the old values
                         var vm = { auction: {},   productIds: [] };

                        validator.resetForm();
                    })
                    .fail(function () {
                        toastr.error("something wrong");
                    });

                    return false;
                }
            });
        });
    </script>

如您所见,我正在使用 document.getElementById('title').value; 获取值并分配它们,但出现语法错误 Expected : Comma expected

不确定这是否重要,但这是在 .NET MVC5 项目中。

【问题讨论】:

  • 乍一看,发送JSON.stringify(vm)之前需要对数据进行字符串化
  • @DarrenSweeney 不,您不需要为 jquery ajax 请求字符串化数据。
  • validate({ ... - 您正在传递一个对象进行验证,一个对象文字需要有 key: value 对。您正在尝试编写普通代码。 vm.auction...
  • 您看到此代码行var validator = $("#newAuction").validate({,您正在创建一个对象,因此您必须遵循对象语法。不允许;
  • 因为文档是这么说的@DarrenSweeney。是的,他正在尝试重新创建 JSON 格式,但错误与他的问题所要求的完全不同

标签: javascript jquery html javascript-objects


【解决方案1】:

将您的值分配代码集移动到 submitHandler 中。检查 validate() https://jqueryvalidation.org/validate/的语法

    //validation and posting to api
    var validator = $("#newAuction").validate({
        submitHandler: function () {
            //assigning values
            vm.auction.Title = document.getElementById('title').value;
            vm.auction.MinBid = document.getElementById('minbid').value;
            vm.auction.EDate = document.getElementById('edate').value;
            vm.productIds.push(1);
            $.ajax({
                url: "/api/newAuction",
                method: "post",
                data: vm
            })
            .done(function () {
                toastr.success("Auction Added to the db");

                //setting the vm to a new vm to get rid of the old values
                 var vm = { auction: {},   productIds: [] };

                validator.resetForm();
            })
            .fail(function () {
                toastr.error("something wrong");
            });

            return false;
        }
    });

【讨论】:

  • 谢谢!那解决了它。但是现在我遇到了另一个错误。当我按下提交按钮时,我在控制台New:92 Uncaught TypeError: Cannot set property 'Title' of undefined 中收到此错误我是否声明vm 对象错误?它应该有两个属性。首先是Auctionobject。 Auction 将具有以下属性:TitleMinBidEDate,然后是 vm 的第二个属性,productIds 数组。它是一个存储 1,2,3 等的简单数组
  • 使用前初始化vm.auction = {};
  • 就是这样!谢谢!
猜你喜欢
  • 2015-09-28
  • 2020-07-15
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2018-12-29
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多