2012-08-05 18 views
5

¿Cómo se obtiene el valor de assocIMG por la clave coincide con la clave por ejemplojQuery valor del objeto get por la clave

si tengo una var 11786 lo quiero volver 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', 
    } 

Por encima son los objetos Estoy trabajando con y debajo está mi jQuery actual. La ayuda sería muy apreciada.

$('#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

¿Puedes explicarlo mejor? Estoy confundido: ¿tienes muchos identificadores de productos en ese conjunto de productos, pero solo 2 imágenes? –

Respuesta

7

Puede utilizar bracket notation a obtener miembros de objeto por sus claves. Tiene la variable prods que contiene una cadena ("11786") y el objeto assocIMG con varias teclas. Entonces sólo tiene que utilizar

assocIMG[prods] 

para obtener el valor de la propiedad 'media/catalog/product/8795139_633.jpg' que está asociado con esa clave.

Tenga en cuenta que siempre se debe utilizar cadenas como claves en el objeto literal, IE no soporta un número no:

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

Otra mejora en la secuencia de comandos no sería colocar a través de la spConfig.attributes cada vez y posiblemente ejecute su acción varias veces si una imagen está contenida en más de un atributo. En cambio, construya un objeto hash fuera de él, donde puede buscar la identificación del producto respectivo.

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

No debe usar números como teclas de objeto (en su inicio). Si desea obtener el valor asociado a la clave 11786 número entero, tendrá que utilizar esta sintaxis:

assocIMG["11786"] or assocIMG[11786] 

No

assocIMG.11786 

Lo primero que hay que hacer es crear las llaves como cadenas, ya que tendría:

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

Pero incluso haciendo esto, usted no será capaz de acceder al campo utilizando assocIMG.11786 y la primera sintaxis válida que presenté seguirá funcionando. El enfoque correcto sería:

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

O

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

Tenga en cuenta que las teclas están empezando con las letras, no números. Y ahora, se puede acceder al campo 11786 como assocIMG.id11786 o assocIMG["id11786"], noassocIMG[id11786]

+0

Los números son claves válidas para el objeto javascript, solo IE no es compatible. Sin embargo, cuando se escribe como cadenas, no hay razón para no usarlas. – Bergi

0

para obtener el valor del objeto, haciendo coincidir clave que terminó con la siguiente

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

Este es realmente el enfoque equivocado, no lo use. – Bergi

+0

@Bergi ¿Podría explicar por qué está mal? Thx –

+0

No hay ninguna razón para enumerar el objeto solo para acceder a una clave específica ya conocida. Al igual que no iteraría una matriz solo para acceder a su índice * i * th. – Bergi

Cuestiones relacionadas