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

コードは期待どおりに機能します。最初の if が true と評価されると、else 部分に到達しません。trueがif(val.id)返されると、残りはすべてスキップされます

于 2012-08-24T05:37:59.127 に答える
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 に答える