0

次のようなコンテンツを含む JSON ファイルを読み込んでいます。

"forget": {
    "form_elements": 2,

    "input1": {
        "type": "text",
        "placeholder": "E-mail adres invullen...",
        "value": ""
    },
    "input2": {
        "type": "submit",
        "placeholder": "",
        "value": "Opvragen"
    }
}

この JSON コンテンツの div を作成していますが、すべて正常に動作します (JSON コンテンツは他にもありますが、これだけが私の質問に関連しています)。

要素を作成した後、このループを使用して入力をループしています。

    for (var i = 1; i <= data[get].form_elements; i++) {
        var input = data[get].input+i;

        $overlay.append( $("<input />").attr({
            type: input.type,
            placeholder: input.placeholder,
            value: input.value
        }));
    }

オーバーレイは、今作成したものです。このコードでは、タイプ、プレースホルダー、および値のない 2 つの基本的な入力フィールドが挿入されています。これは、このコードが機能しないためです。

var input = data[get].input+i;

しかし、私がこれを使用しているとき:

var input = data[get].input1;
var input = data[get].input2;

すべて正常に動作します。

ループで「i」変数をログに記録すると、数値昇順であることがわかります。

.toStringで文字列に変換しなければならないと思ったのですが、これもうまくいきません。

私の質問は、なぜこれが機能しないのですか? そして、これについて何ができますか?私の問題をうまく説明してくれることを願っています。よろしくお願いします。

4

1 に答える 1

2

オブジェクトを使用して配列をエミュレートしようとします。

まず第一に、これを行うとコードが機能するはずです:

var input = data[get]["input"+i];

次に、コンテンツを次のように変更することをお勧めします。

          "forget": {
            "input1": {
                    "type": "text",
                    "placeholder": "E-mail adres invullen...",
                    "value": ""
            },
            "input2": {
                    "type": "submit",
                    "placeholder": "",
                    "value": "Opvragen"
            }
    }

そして、あなたのループは次のようになります:

for (var key in data[get]) {
    var input = data[get][key];
    ...
}

本当に配列を使用したい場合は、これを JSON データとして使用する必要があります。

            "forget":  [
                    {
                            "type": "text",
                            "placeholder": "E-mail adres invullen...",
                            "value": ""
                    },
                    {
                            "type": "submit",
                            "placeholder": "",
                            "value": "Opvragen"
                    }
            ];
            for(var i = 0, len = data[get].length; i < len ; i++){
                                    var input = data[get][i];
                ...
            }

2つの方法のいずれかを選択することをお勧めします。

配列とオブジェクトは同じ方法で操作されないため、必要に応じて使用するタイプを選択する必要があります。

于 2013-10-31T12:37:04.617 に答える