Nouveau en javascript, besoin d'aide pour ajouter le nom de l'élément au tableau. Il génère une erreur Uncaught TypeError: impossible de lire la propriété «push» de undefined sur addToCart (navbar.js: 32). Voici mon code, cela fonctionne lors de la concaténation d'une chaîne

<div class="productprice"><div class="pull-right"><a href="#" onclick ="addToCart('Cabernet Sauvignon, Year 2016');" class="btn btn-danger btn-sm my-1" role="button">BUY</a></div>

var finalOrder = new Array();

function addToCart(name){  
    this.finalOrder.push(name);
    alert(finalOrder.toString());
}

EDIT: modifié en ceci, aléatoire passe mais la même erreur se reproduit. UnCaught TypeError: Impossible de lire la propriété 'push' de undefined à addToCart

var finalOrder = [];

function addToCart(name){  
    alert("random");
    finalOrder.push(name);
    alert(finalOrder.toString());    
}
-1
CautionPackage 12 avril 2018 à 22:30

3 réponses

Meilleure réponse

this fait uniquement référence à l'étendue de la fonction où vous l'appelez et non à l'étendue globale où votre tableau finalOrder est défini. En supprimant le this., vous référencerez correctement la variable.

0
dukedevil294 12 avril 2018 à 19:35

En javascript, vous pouvez simplement spécifier un tableau en utilisant var finalOrder = [];.

Mais l'erreur ici est la portée actuelle. Lorsque vous utilisez le mot clé réservé this dans la fonction, il fait référence à l'étendue de la fonction, qui dans ce cas est l'objet window.

Pour le faire fonctionner, changez simplement

...
function addToCart(name){
  finalOrder.push(name);
  alert(finalOrder.toString());
}

Dans la dernière version de javascript (vous avez probablement déjà entendu parler d'ecmascript), vous pouvez faire:

...
const addToCart = name => ([ ...finalOrder, name ]);

Si vous venez de C #, cela aura probablement du sens!

0
thismarcoantonio 13 avril 2018 à 13:32

Essaye ça

finalOrder= []

function addToCart(name){  
     finalOrder.push(name);
     alert(finalOrder.toString());
 }
0
Maryam Ghafarinia 13 avril 2018 à 06:47