2010-05-26 4 views
0

Débutant question. Compte tenu du html suivant.jQuery - variables dynamiques?

<div id="mycontainer1" class="container"> 
<input type="text" class="name"/> 
<input type="text" class="age"/> 
</div> 

<div id="mycontainer2" class="container"> 
<input type="text" class="name"/> 
<input type="text" class="age"/> 
</div> 

Je suis en train de créer une fonction où je peux passer un identifiant d'élément et un tableau qui contient les classes des valeurs d'entrée que je veux obtenir.

Ainsi, par exemple,

var inputClasses = ['name','age']; 

getInputValue('.container', inputClasses); 


    function getInputValue(elem, arr) {  
      $(elem).each(function() { 
       // need a way to map items in array to variables 

       // but how do I do this dynamically? 
       var nameValue = $(this).find('.name').val(); 
       var ageValue = $(this).find('.age').val(); 

      }); 

Répondre

2

Essayez:

var inputClasses = ['name','age']; 

console.log(getInputValues('#mycontainer1', inputClasses)); 

function getInputValues(elem, arr) { 
    return $(elem).find("." + arr.join(",.")).map(function(val) { 
    return $(this).val(); 
    }).get(); 
} 
+0

Je pense que vous voulez 'find (+ arr.join (''.) '')'. – tvanfosson

+0

Peut-être que vous voulez marquer 'get()' à la fin si un tableau de base au lieu de jQuery est désiré comme sortie. – tvanfosson

+0

@hanfosson bons points (x2) :) – cletus

1

Essayez ceci:

var inputClasses = ['name','age']; 
var inputValues = getInputValue('#myContainer1', inputClasses); 

function getInputValue(elem, arr) { 
    var out = []; 

      for(i=0; i <= arr.length; i++) { 
       var out[arr[i]] = $(elem+' .'+arr[i]).val(); 
      }; 

    return out; 
} 

Vous devriez maintenant avoir un tableau inputValues qui contient les valeurs de chaque champ d'entrée, avec le nom de la classe comme clé d'index.

Par exemple, vous pouvez alors lire la valeur "name" comme ceci:

alert('Your name: '+inputValues['name']); 
Questions connexes