【问题标题】:Object in jquery not set on submitjquery中的对象未在提交时设置
【发布时间】:2020-02-17 09:01:40
【问题描述】:

我想获取表单的输入值并将其放置在对象中(用于报价)。

所以我尝试将此代码放在提交上:

$(document).ready(function(){
$('#formOffre').on('submit', function(e) {
        e.preventDefault();

        console.log(Offre); // give undefined in console
        if ( typeof Offre == 'undefined'){
            // if undefined, create object
            var Offre = {
                BuyerID: 1, //I will handle this later
                Total: 0,
                OffreItem: [] //array with json objects
            };
            Offre.OffreItem.id = 0;
            console.log("object created");

            for (i=0; i > Offre.OffreItem.id ; i++) {
                Offre.OffreItem.modele = formOffre.modele.value;
                Offre.OffreItem.longueur = formOffre.longueur.value;
                Offre.OffreItem.hauteur = formOffre.hauteur.value;
                Offre.OffreItem.qte = formOffre.qte.value;
                Offre.OffreItem.rix = formOffre.prix.value;
                console.log("getting parameters of inputs to offer");
            }
        } else {
            //if object exists ony get informations of inputs
           Offre.OffreItem.id = 0; 
            for (i=0; Offre.OffreItem.id < i; i++){
                Offre.OffreItem.modele = formOffre.modele.value;
                Offre.OffreItem.longueur = formOffre.longueur.value;
                Offre.OffreItem.hauteur = formOffre.hauteur.value;
                Offre.OffreItem.qte = formOffre.qte.value;
                Offre.OffreItem.rix = formOffre.prix.value;
            }
        }

这是我的代码。当我第一次单击提交时,它会转到 if 语句并创建对象。但是当我再次点击时,我会通过 if 语句,就像未设置对象一样。

我放了一个控制台日志,并且在每种情况下对象都是未定义的。

有人能帮帮我吗?

谢谢

【问题讨论】:

  • 如果您希望下次运行相同的函数时可以访问Offre,则需要在函数范围之外定义它。

标签: javascript jquery html json object


【解决方案1】:

您在定义它的范围之外检查 Offre。

enter coconsole.log(Offre); // give undefined in console
    if ( typeof Offre == 'undefined'){
        // if undefined, create object
        var Offre = { //here is issue this should be above submit function 
            BuyerID: 1, //I will handle this later
            Total: 0,
            OffreItem: [] //array with json objects
        };

还要确保您的页面保持状态。 为您创建了示例,请看一下。 here 希望这能解决您的问题。

Fiddle

【讨论】:

    【解决方案2】:

    这里的问题是你在函数内部定义你的变量。

    为了简化你的代码:

    $('#formOffre').on('submit', function(e) {
      if ( typeof Offre == 'undefined'){
        var Offre = { }; // This variable is only accessible inside this function
      } else {
        //
      }
    }
    

    var Offre 将在函数范围内定义一个变量,下次运行该函数时,将创建一个具有该名称的新变量(意味着它最初始终为 undefined

    要解决这个问题,您可以在函数之外定义变量:

    var Offre;
    $('#formOffre').on('submit', function(e) {
      if ( typeof Offre == 'undefined'){
        Offre = { }; // Notice that we're not creating a new variable here, just accessing the one defined above
      } else {
        //
      }
    }
    

    【讨论】:

    • 0 感谢您的快速答复。但我遇到了同样的问题
    • @Daniel 你能在 sn-p 中显示你更新的代码吗?这应该有效,您是否从函数内部的Offre 中删除了var
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多