7

您将如何assocIMG通过与键匹配的键获得值,例如

如果我有一个 var11786我希望它返回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'
};

对脚本的另一项改进是不循环遍历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,并且我提供的第一个有效的 sintax 仍然可以使用。正确的方法是:

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',
}

请注意,键现在以字母开头,而不是数字。现在,您可以使用or访问该11786字段,而不是assocIMG.id11786assocIMG["id11786"] assocIMG[id11786]

于 2012-08-05T04:00:16.533 回答
0

要通过匹配键从对象中获取值,我最终得到以下结果

$.each(assocIMG, function(index, value) { 
        if(index == prods) {
             var image_path = value;
             $("#product_img").attr("src", image_path);
             //alert(image_path); 
        }
于 2012-08-05T04:22:49.943 回答