2012-08-05 38 views
5

Làm thế nào bạn sẽ nhận được giá trị của assocIMG bằng phím phù hợp với những ví dụ quan trọngjQuery đối tượng get giá trị bằng phím

nếu tôi có một var 11786 tôi muốn nó trở 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', 
    } 

Trên đây là các đối tượng Tôi đang làm việc với và dưới đây là jQuery hiện tại của tôi. Trợ giúp sẽ được đánh giá cao.

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

Bạn có thể giải thích rõ hơn không? Tôi đang bối rối: bạn có rất nhiều id sản phẩm trong mảng sản phẩm đó, nhưng chỉ có 2 hình ảnh? –

Trả lời

7

Bạn có thể sử dụng bracket notation để có được các thành viên đối tượng bằng các phím của họ. Bạn có biến số prods chứa một chuỗi ("11786") và đối tượng assocIMG với các khóa khác nhau. Sau đó, chỉ cần sử dụng

assocIMG[prods] 

để nhận giá trị thuộc tính 'media/catalog/product/8795139_633.jpg' được liên kết với khóa đó.

Lưu ý rằng bạn nên luôn luôn sử dụng chuỗi như là chìa khóa trong đối tượng của bạn theo nghĩa đen, IE không hỗ trợ số đó:

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

Một cải tiến để kịch bản của bạn sẽ không để lặp qua mỗi lần spConfig.attributes và có khả năng thực thi hành động của bạn nhiều lần nếu một hình ảnh được chứa trong nhiều thuộc tính. Thay vào đó, hãy xây dựng một đối tượng băm ra khỏi nó, nơi bạn có thể tìm kiếm id sản phẩm tương ứng.

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

Bạn không nên sử dụng số làm khóa đối tượng (khi bắt đầu). Nếu bạn muốn để có được những giá trị gắn liền với phím 11786 số nguyên, bạn sẽ cần phải sử dụng cú pháp sau:

assocIMG["11786"] or assocIMG[11786] 

Không

assocIMG.11786 

Việc đầu tiên mà bạn cần làm là tạo ra các khóa của bạn là chuỗi, vì bạn sẽ có:

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

Nhưng thậm chí làm điều này, bạn sẽ không thể truy cập trường bằng cách sử dụng assocIMG.11786 và sintax hợp lệ đầu tiên mà tôi trình bày sẽ vẫn hoạt động. Cách tiếp cận đúng sẽ là:

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

Hoặc

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

Lưu ý rằng các phím hiện nay đang bắt đầu với chữ cái, không phải là số. Và bây giờ, bạn sẽ có thể truy cập vào các lĩnh vực 11786 như assocIMG.id11786 hoặc assocIMG["id11786"], khôngassocIMG[id11786]

+0

Số là các khóa chữ hợp lệ đối tượng javascript, chỉ có IE không hỗ trợ điều đó. Tuy nhiên, khi được viết thành chuỗi không có lý do gì để không sử dụng chúng. – Bergi

0

Để Lấy giá trị từ đối tượng bằng cách kết hợp chính tôi đã kết thúc với những điều sau

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

Đây thực sự là cách tiếp cận sai, xin đừng dùng nó. – Bergi

+0

@Bergi Bạn có thể giải thích tại sao nó sai? Thx –

+0

Không có lý do gì để liệt kê đối tượng chỉ để truy cập một khóa cụ thể, đã biết. Cũng giống như bạn sẽ không lặp lại một mảng chỉ để truy cập vào chỉ mục thứ i * của nó. – Bergi

Các vấn đề liên quan