0

我正在使用 jQuery 的map函数进行 DOM 操作。使用这个我试图将一个元素附加到一个表单中。

它只能正常工作一次;这意味着我只在if 部分中获得结果,我无法从该else if部分中获得任何价值。我的功能有什么问题,或者我的方法有什么问题?

我的数据:

"fields":[
            {
               "id":"firstname",
               "label":"First Name",
               "name":"fname",
               "type":"text",
               "value":""
            },
            {
               "id":"email",
               "label":"Email",
               "name":"email",
               "type":"text",
               "value":""
            },
            {
               "id":"countries",
               "label":"Country",
               "name":"countries",
               "type":"select",
               "options":[
                  {
                     "value":"",
                     "text":"Select Country"
                  },
                  {
                     "value":"in",
                     "text":"India",
                      "selected":"true"
                  },
                  {
                     "value":"us",
                     "text":"United Stated"

                  },
                  {
                     "value":"uk",
                     "text":"United Kingdom"
                  },
                  {
                     "value":"cn",
                     "text":"Canada"
                  }
               ]
            },
            {
               "id":"submit",
               "name":"submit",
               "type":"submit",
               "value":"Submit"
            }
         ] 

我的功能:

    var processModules = function (mData) {
        $.map(mData, function (val,i) {
            $(val.container).append(
                $(val.type === 'content' || val.type === 'navigation' ?
                $('<div />',{
                    'class':val.attributes['class'],
                    id:val.attributes.id})
                .append(val.title ? $('<h2 />',{text:val.title}) : "")
                .append(val.subtitle ? $('<h3>',{text:val.subtitle}) : "")
                :
                val.type === 'form' ? $('<form />',{
                    id:val.attributes.id,
                    'class':val.attributes['class'],
                    action:val.action,
                    name:val.name
                })
                .append($('<legend />',{text:val.title}))
                .append(
                    $.map(val.fields, function (val,i) {
var element;
                        if(val.id) {
                            console.log(val.id); // getting values and appending elements
                        }
                        if (val.label) {
                            element = $('<label />',{text:val.label}); //  am not getting any value here..
                        }
                        if (val.type) {
                            element = $('<input />',{id:val.id}) // I am only getting value here..
                        }
                    } )
                )
                : ""));
        } )
    }

问题是什么?谁能帮我?

4

2 回答 2

1

else if只有在前面的 if/else if 语句不是时才会被调用。例如:

if (true) {
    // This code gets run
}

else if (true) {
    // This code never will
}

考虑到这一点,将您的 if 语句更改为如下所示:

if(val.id) {
    console.log(val.id);
}

if (val.label) {
    console.log(val.label);
}

if (val.type) {
    console.log(val.type);
}
于 2012-08-24T05:36:57.257 回答
1

您的代码按预期工作,如果第一个 if 评估为 true,您将无法进入 else 部分。一旦if(val.id)返回 true,其余的都将被跳过

于 2012-08-24T05:37:59.127 回答