2012-08-05 6 views
5

Wie würden Sie den Wert assocIMG erhalten, indem Taste die Taste zBjQuery-Objekt get Wert von Schlüssel

passend, wenn ich eine var haben 11786 ich es 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', 
    } 

Above zurückkehren wollen, ist die Objekte Ich arbeite mit und unten ist meine aktuelle jQuery. Hilfe würde sehr geschätzt werden.

+0

Können Sie das besser erklären? Ich bin verwirrt: Sie haben viele Produkt-IDs in diesem Produkt-Array, aber nur 2 Bilder? –

Antwort

7

Sie können am Ende bracket notation zu Holen Sie Objektmitglieder mit ihren Schlüsseln. Sie haben die Variable prods mit einer Zeichenfolge ("11786") und das Objekt assocIMG mit verschiedenen Schlüsseln. Dann nutzen Sie einfach

assocIMG[prods] 

den Eigenschaftswert 'media/catalog/product/8795139_633.jpg' zu erhalten, die mit diesem Schlüssel zugeordnet ist.

Beachten Sie, dass Sie immer Strings als Schlüssel in Ihrem Objektliteral verwenden sollten, wird IE-Nummern nicht dort unterstützen:

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

Eine weitere Verbesserung an das Skript wäre nicht durch die spConfig.attributes jedes Mal Schleife und möglicherweise Ihre Aktion mehrmals ausführen, wenn ein Bild in mehr als einem Attribut enthalten ist. Erstellen Sie stattdessen ein Hash-Objekt, in dem Sie einfach die entsprechende Produkt-ID nachschlagen können.

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

Sie sollten keine Zahlen als Objektschlüssel verwenden (am Anfang). Wenn Sie den Wert im Zusammenhang mit der 11786 Integer-Schlüssel erhalten möchten, müssen Sie diese Syntax verwenden:

assocIMG["11786"] or assocIMG[11786] 

Nicht

assocIMG.11786 

Das erste, was Sie tun müssen, ist zu erstellen Ihre Schlüssel als Strings, da müssten Sie:

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

Aber auch dies zu tun, werden Sie nichtdas Feld zugreifen können mitund das erste gültige sintax, das ich präsentierte, wird immer noch funktionieren. Der richtige Ansatz wäre:

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

Oder

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

Beachten Sie, dass die Schlüssel jetzt mit Buchstaben beginnen, keine Zahlen. Und jetzt werden Sie Zugriff auf das 11786 Feld als assocIMG.id11786 oder assocIMG["id11786"], nichtassocIMG[id11786]

+0

Nummern sind gültige Javascript-Objekt-Literalschlüssel, nur IE unterstützt das nicht. Wenn sie jedoch als Strings geschrieben werden, besteht kein Grund, sie nicht zu verwenden. – Bergi

0

, um den Wert von Objekt zu erhalten, indem Schlüssel passend ich mit den folgenden

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

Das ist wirklich der falsche Ansatz, bitte benutze das nicht. – Bergi

+0

@Bergi Könnten Sie bitte erklären, warum es falsch ist? Thx –

+0

Es gibt keinen Grund, das Objekt aufzuzählen, nur um auf einen bestimmten, bereits bekannten Schlüssel zuzugreifen. Genauso wie man ein Array nicht nur iteriert, um auf seinen * i * -ten Index zuzugreifen. – Bergi