2017-10-11 4 views
2

J'ai quelques cases à cocher que j'essaie d'obtenir les valeurs de l'aide d'une fonction d'assistance jquery.Fonction d'aide Jquery avec case à cocher foreach

<div class="checkbox"> 
<label> 
<input name="gift_wrap" value="Wrap" type="checkbox"> Gift wrap 
</label> 
<label> 
<input name="gift_wrap" value="Wrapper" type="checkbox"> Wrapper 
</label> 
<label> 
<input name="gift_wrap" value="Pap" type="checkbox"> Pap 
</label> 
</div> 

Voici le Jquery:

_getContent: function (elm) { 
     if(elm.is(":checkbox, :radio")){ 
      return elm.is(":checked") ? elm.map(function(){ 
      return $(this).val()}) : ''; 
     } else { 
      return elm.text(); 
     } 
     return ''; 
    } 

Voici comment il est appelé:

_getProductDetails: function (elm) { 
     var mi = this; 
     var p = {}; 
     elm.parents(this.options.productContainerSelector) 
      .find(this.options.productElementSelector) 
      .each(function() { 
       if ($(this).is('[name]') === true || typeof $(this).data('name') !== typeof undefined) { 
        var key = $(this).attr('name') ? $(this).attr('name') : $(this).data('name'); 
        var val = mi._getContent($(this)); 
        if(key && val){ 
         p[key] = val;  
        } 
       } 
      }); 
     return p; 
    } 

Je reçois ce [object Object] au lieu des valeurs. Je ne suis pas si bon à Jquery et pas tout à fait sûr comment s'y prendre, j'ai aussi essayé .each sans beaucoup de succès.

+0

de sorte que vous essayez de dire si une case est cochée, renvoyer la valeur? – Keith

+1

Comment appelez-vous l'aide? – Barmar

+0

@Barmar ajouté à l'aide de {gift_wrap} –

Répondre

2

La méthode .map() de jQuery renvoie une collection jQuery des résultats de la fonction, et non un tableau. Vous pouvez utiliser .get() pour le convertir en tableau.

Mais il ne semble pas y avoir de raison d'appeler .map() en premier lieu. Renvoie juste la valeur de l'élément s'il est coché.

_getContent: function (elm) { 
    if(elm.is(":checkbox, :radio")){ 
     return elm.is(":checked") ? elm.val() : ''; 
    } else { 
     return elm.text(); 
    } 
} 
+0

Eh bien, c'est ce que j'ai commencé avec mais il ne récupère qu'une seule valeur. Peut-être ai-je besoin d'un endroit pour imprimer {gift_wrap}? –

+0

C'est pourquoi j'ai demandé comment vous appelez la fonction. Quelle est la valeur de 'elm'? – Barmar

+0

Mon code devrait fonctionner. Vous avez une boucle '.each()' dans _getProductDetails() ', donc' elm' sera juste une seule case à cocher quand elle appelle '_getContent()'. Il n'y a qu'une seule valeur à récupérer. – Barmar

0

.map est une fonction à appeler sur un tableau. Je suppose que vous traversez une seule entrée. Cela fonctionnera (modifié pour le faire fonctionner dans l'extrait)

En outre, le dernier retour ne tirera jamais. voici donc une solution:

_getContent= function (elm) { 
 
     if(elm.is(":checkbox, :radio")){ 
 
      return elm.is(":checked") ? elm.val() : ''; 
 
     } 
 
     return elm.text(); 
 
     
 
    } 
 
    
 
    console.log(_getContent($('input').eq(1)))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="checkbox"> 
 
<label> 
 
<input name="gift_wrap" value="Wrap" type="checkbox"> Gift wrap 
 
</label> 
 
<label> 
 
<input name="gift_wrap" value="Wrapper" type="checkbox" checked> Wrapper 
 
</label> 
 
<label> 
 
<input name="gift_wrap" value="Pap" type="checkbox"> Pap 
 
</label> 
 
</div>