2012-08-05 32 views
5

值你將如何通過關鍵配套的關鍵如獲得assocIMGjQuery對象度日鍵

如果我有一個變種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); 

    }); 

}); 
+0

你能解釋得更清楚嗎?我很困惑:您的產品陣列中有很多產品ID,但只有2張圖片? – 2012-08-05 03:58:07

回答

7

您可以使用bracket notation來通過鍵獲取對象成員。變量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); 
}); 
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', 
} 

但即使是這樣,您將無法訪問使用場和我提出的第一個有效的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', 
} 

注意,密鑰現在開始用字母,而不是數字。而現在,你就可以訪問11786場爲assocIMG.id11786assocIMG["id11786"]assocIMG[id11786]

+0

數字是有效的javascript對象文字鍵,只有IE不支持。但是,當寫成字符串時,沒有理由不使用它們。 – Bergi 2012-08-05 04:23:36

0

通過匹配鍵時,會從對象的值我結束了以下

$.each(assocIMG, function(index, value) { 
     if(index == prods) { 
      var image_path = value; 
      $("#product_img").attr("src", image_path); 
      //alert(image_path); 
     } 
+0

這真的是錯誤的方法,請不要使用它。 – Bergi 2012-08-05 04:40:30

+0

@Bergi你能解釋一下爲什麼它錯了嗎? Thx – 2014-12-04 04:26:13

+0

沒有理由枚舉對象來訪問特定的已知密鑰。就像你不會迭代一個數組來訪問它的* i * th索引一樣。 – Bergi 2014-12-04 04:29:37