0

$ .mapメソッドを使用して、Jsonからデータを取得しています。データの種類に応じて、要素を作成し、データの内容をコンテナに追加しています。ie9を含むすべてのブラウザで正常に動作します。しかし、それよりも少ない、つまり9、私は何も得ていません。

どうすればこれを修正できますか?

私のコード:

var processModules = function (mData) {
    var lMData = mData;
    $.map(lMData, function (mVal,i) {
            $(mVal.type === 'form' ?  '<form></form>' : '<div></div>',{
                id : mVal.attributes.id,
                'class' : mVal.attributes['class']
            })
            .appendTo(mVal.container);    // not appending in less than ie9.  
    } )
}

$(document).ready(function () {
   $.getJSON('json.txt', function (data) {
        if($(data['modules'])){
            processModules($(data['modules']));
        }
   })   
});

私のjson:

 "modules":[
      {
         "type":"navigation",
         "container":"#header",
         "title":"Top Navigation",
         "attributes":{
            "class":"topNavigation",
            "id":"topNavigation"
         }
      },
      {
         "type":"content",
         "title":"Hi Welcome to mobile development",
         "subtitle":"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
         "container":"#maincontent",
         "attributes":{
            "class":"topContent"
         }
      },
      {
         "type":"form",
         "title":"Registration Form",
         "action":"submit.aspx",
         "name":"registrationform",
         "container":"#maincontent",
         "attributes":{
            "class":"registrationform"
         },
         "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"
            }
         ]
4

2 に答える 2

-1

は JS の予約語であるclassため、引用符で囲まずにオブジェクト リテラル プロパティに名前を付けることはできません。class変化する:

class : mVal.attributes.class

'class' : mVal.attributes.class

他のブラウザーはそれを許可します (ただし、なぜ許可するのか、常に少し戸惑っていますが、プロパティではなく変数の場合は、結局のところ、エラーになります)。

通常、独自の定義では予約語を避けてください。

于 2012-08-13T10:59:50.083 に答える
-1

関数が呼び出されていると仮定すると (そうでない可能性も十分にあります)、classキーを引用符で囲み、予約済みキーワードの衝突規則に違反しないようにする必要があります。

値に対してもこれを行う必要があります。

'class': mVal.attributes['class']

構文を使用するのも正当な構文ではない[]ためです。myobject.'mykey'

コードに余分な jQuery ラッパーもあります。

if ($(data['modules'])) { ... }

modules 変数は DOM 要素ではなくオブジェクトの配列であるため、これは誤りです。

全体を次のように書きます。

var processModules = function(data) {
    var lMData = data.modules || [];  // default to empty array
    $.map(lMData, function (mVal,i) {
        $(mVal.type === 'form' ?  '<form>' : '<div>', mVal.attributes);
        .appendTo(mVal.container);
    })
}

$(document).ready(function () {
   $.getJSON('json.txt', processModules);
});

JSON の属性オブジェクトは既に に直接提供することが合法であるため、新しい属性オブジェクトを作成していないことに注意してください$()

それでもIE9 で動作しない場合は、さらに多くのデバッグを行い、呼び出し.appendToが適切なパラメーターで実際に呼び出されていることを確認する必要があります。jQuery のコア関数が機能しなくなるということは考えられません。

于 2012-08-13T11:01:24.063 に答える