2009-12-08 4 views
2

Je rencontre un problème dans mon panier.Certains produits ont des options comme la couleur/la taille. Je dessine la boîte de sélection pour la couleur/taille et une entrée pour la quantité.jquery tableau de sélecteur

<select name="productOption[1234][color]"> 
<select name="productOption[1234][size]"> 
<input type="text" name="productOption[1234][qty]"> 

option est donc un tableau qui contient les valeurs pour chaque product.In l'exemple Abov sont les options de produit avec id = 1234.

J'ai essayé

var productOptions=$("name^='productOption["+productID+"]'").val(); 

attendant d'obtenir l'éventail d'options pour la productID donnée, mais sa ne fonctionne pas. Les options sont dynamiquement certains produits peuvent avoir des options supplémentaires

Quelqu'un peut-il m'aider avec le sélecteur, alors récupérez la matrice de valeurs pour un ID de produit donné et transmettez-les à serverSide.

Merci

Répondre

9

Je pense que c'est ce que vous voulez en supposant que vous utilisez jQuery.

<script type="text/javascript"> 
function getProductDetails(product_id) { 
    var product_details = []; 
    jQuery('[name*="productOption[' + product_id + ']"]').each(function() { 
     var option = jQuery(this); 
     var type = option.attr('name').match(/productOption\[\d+\]\[(\w+)\]/); 
     product_details[ type[1] ] = option.val(); 
    }); 

    return product_details; 
} 
</script> 

Ceci retournera un tableau associé. Ainsi, vous pouvez faire ...

var details = getProductDetails(1234); 
alert(details['qty']); 
+1

+1 pour l'excellente réponse. – Fenton

+0

@Sohnee merci! – William

4

Vous avez oublié le sélecteur d'attribut ([attr^= valeur])

var productOptions=$("[name^='productOption["+productID+"]']").val(); 
+0

+1 pour repérer les disparus entre crochets, mais cette instruction vous donnera la valeur du premier élément uniquement car la méthode val() ne concaténera pas les valeurs multiples. – Fenton

1

Scape supports internes avec '\ \' (pas d'espace) - beaucoup plus facile

$('input[name=items\\[\\]]') 

comme on le voit ici jquery - select all checkboxes with js array name

+1

Tout d'abord, votre technique ne permet pas de répondre à cette question car l'OP inclut déjà le texte entre guillemets. Deuxièmement, vous répondez à une question posée il y a près de deux ans et qui a déjà une réponse acceptée. Troisièmement, comment l'ajout de «\\» non intuitif dans le code peut-il être plus facile que de simplement utiliser des qoutes compatibles? – bPratik