7

assocIMGたとえば、キーに一致するキーによって値を取得するにはどうすればよいですか

var がある場合は、11786それを返したいmedia/catalog/product/8795139_633.jpg

var spConfig = {
    "attributes": {
        "125": {
            "id": "125",
            "code": "pos_colours",
            "label": "Colour",
            "options": [{
                "id": "236",
                "label": "Dazzling Blue",
                "price": "0",
                "oldPrice": "0",
                "products": ["11148"]
            }, {
                "id": "305",
                "label": "Vintage Brown",
                "price": "0",
                "oldPrice": "0",
                "products": ["11786", "11787", "11788", "11789", "11790", "11791", "11792", "11793"]
            }]
        }

    }
};
var assocIMG = // Added  - Removed { here, causes issues with other scripts when not working with a configurable product.
    {
        11786: 'media/catalog/product/8795139_633.jpg',
        11787: 'media/catalog/product/8795139_633.jpg',
    } 

上は私が使用しているオブジェクトで、下は現在の jQuery です。助けていただければ幸いです。

$('#attribute125').change(function() {
    var image = $(this).val();

    $.each(spConfig.attributes, function() {

        prods = $(this.options).filter( function() { return this.id == image; } )[0].products[0];

    alert(prods);

    });

});
4

3 に答える 3

9

ブラケット表記を使用して、オブジェクト メンバーをキーで取得できます。prods文字列 ( ) を含む変数と、さまざまなキーを持つ"11786"オブジェクトがあります。assocIMG次に、使用するだけです

assocIMG[prods]

'media/catalog/product/8795139_633.jpg'そのキーに関連付けられているプロパティ値を取得します。

オブジェクト リテラルでは常に文字列をキーとして使用する必要があることに注意してください。IE は数値をサポートしていません。

var assocIMG = {
    "11786": 'media/catalog/product/8795139_633.jpg',
    "11787": 'media/catalog/product/8795139_633.jpg'
};

スクリプトのもう 1 つの改善点は、毎回ループするのではなくspConfig.attributes、画像が複数の属性に含まれている場合にアクションを複数回実行する可能性があることです。代わりに、そこからハッシュ オブジェクトを作成します。ここで、それぞれの製品 ID を検索できます。

var productById = {};
$.each(spConfig.attributes, function() {
    $.each(this.options, function() {
         var id = this.id;
         productsById[i] = this.products[0];
    });
});

$('#attribute').change(function() {
    var id = this.value;
    var prod = productById[id];
    var image = assocIMG[prod];
    $("#product_img").attr("src", image);
});
于 2012-08-05T04:26:20.200 に答える
3

数値をオブジェクト キーとして (先頭に) 使用しないでください。整数キーに関連付けられた値を取得する場合は、次の11786構文を使用する必要があります。

assocIMG["11786"] or assocIMG[11786]

いいえ

assocIMG.11786

最初に行う必要があるのは、キーを文字列として作成することです。

var assocIMG = {
    "11786": 'media/catalog/product/8795139_633.jpg',
    "11787": 'media/catalog/product/8795139_633.jpg',
} 

しかし、これを行っても、使用してフィールドにアクセスすることはできずassocIMG.11786、私が提示した最初の有効なシンタックスは引き続き機能します。正しいアプローチは次のようになります。

var assocIMG = {
    id11786: 'media/catalog/product/8795139_633.jpg',
    id11787: 'media/catalog/product/8795139_633.jpg',
}

または

var assocIMG = {
    "id11786": 'media/catalog/product/8795139_633.jpg',
    "id11787": 'media/catalog/product/8795139_633.jpg',
}

キーが数字ではなく文字で始まることに注意してください。11786これで、フィールドにassocIMG.id11786orassocIMG["id11786"]ではなくとしてアクセスできるようになります assocIMG[id11786]

于 2012-08-05T04:00:16.533 に答える