2017-05-30 2 views
0

Je parcours des éléments DOM lorsque je clique sur un bouton donné. J'ai joint la classe finish-proc au bouton, donc lorsque vous cliquez dessus activer cette fonction:jQuery: Ajouter des objets à des tableaux dans chaque boucle ne fonctionne pas

<script> 
    $(document).on('click', '.finish-proc', function() { 
     var communities = []; 

     var $this, $thisDay, input, inputDay, text, textDay, obj, objDay; 

     $('.panel-default').each(function (i) { 
      var maxPeople = '.' + $(this).attr('data-community') + '-max-people'; 
      var dayInfoRow = '.' + $(this).attr('data-community') + '-day-info'; 
      obj = {}; 
      obj["maxPeople"] = $(maxPeople).val(); 

      var daysArrayInLoop = []; 

      $(dayInfoRow).each(function (j) { 
       var objDay = {}; 

       var dayString = '.' + $(this).attr('data-community') + '-day-' + (j + 1); 
       var dayStringStart = '.' + $(this).attr('data-community') + '-day-' + (j + 1) + '-start'; 
       var dayStringEnd = '.' + $(this).attr('data-community') + '-day-' + (j + 1) + '-end'; 

       objDay["dayString"] = $(dayString).val(); 
       objDay["dayStringStart"] = $(dayStringStart).val(); 
       objDay["dayStringEnd"] = $(dayStringEnd).val(); 

       daysArrayInLoop.push(objDay); 
      } 

      obj["dayArray"] = daysArrayInLoop; 

      communities.push(obj); 
     } 
    } 
</script> 

Ce code se brise sur la ligne:

daysArrayInLoop.push(objDay); 

Avec l'erreur:

daysArrayInLoop.push is not a function

Quelqu'un peut-il me dire pourquoi?

EDIT - J'ai essayé de modifier le var daysArrayInLoop = [];-var daysArrayInLoop = {};, obtenant toujours la même erreur

+0

peut vous essayer avec 'daysArrayInLoop. appuyez sur (1); 'et voyez si cela donne la même erreur. Faites aussi 'console.log (daysArrayInLoop)' avant de pousser et de vérifier si la console montre qu'il s'agit d'un tableau. Le code que vous avez écrit est correct; cela devrait fonctionner –

+2

Avez-vous défini 'dayInfoRow' n'importe où? – cars10m

+0

Fondamentalement, le tableau 'daysArrayInLoop' est défini correctement et est dans la portée au moment où vous utilisez sa méthode' .push() '. Donc, il doit y avoir quelque chose d'autre .. – cars10m

Répondre

2

Essayez Ce code Define Array après pression dans l'objet

var daysArrayInLoop = new Array(); 
    daysArrayInLoop.push(obj); 
+0

C'est ce qu'il a fait. Je ne comprends pas comment cela a fonctionné plutôt que de placer 'var joursArrayInLoop = [];' – NoReceipt4Panda

+1

'function Array() { this.is = 'SPARTA'; } var a = new Array(); var b = []; alerte (a.is); // => 'SPARTA' alerte (b.is); // => undefined a.push ('Woa'); // => TypeError: a.push n'est pas une fonction b.push ('Woa'); // => 1 (OK) ' new Array() crée un nouveau tableau d'exécution. Aucun traitement supplémentaire nécessaire du tout [link] (https://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar) –

+0

Merci pour l'explication et la référence de lien! Je comprends maintenant. :) – NoReceipt4Panda