Uncaught ReferenceError sur une variable

Résolu/Fermé
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - 30 juil. 2022 à 09:14
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - 30 juil. 2022 à 10:06

Bonjour à tous,

Je viens vous demander votre aide avant de devenir fou !

J'ai un code Javascript qui fonctionne parfaitement sur une page, je le copie/colle sur une autre et l'adapte au besoin de cette page et là :

Erreur en console :
recette-ajout1.php:218 Uncaught ReferenceError: liste_ingredients is not defined
    at plus_Ingredient (recette-ajout1.php:218:21)
 

Voici le code simplissime en question : 

var selectAliment = document.getElementById("aliment");
var selectQte = document.getElementById("quantite");
            
function plus_Ingredient(){
    if (selectAliment.value != '' && selectQte.value > 0){
        // Récupération de l'aliment :
        var text_aliment = selectAliment.options[selectAliment.selectedIndex].text;
        text_aliment = text_aliment.replace(/[';|]/g,' ');
        // Récupération des quantités :
        var quantites = parseFloat(selectQte.value).toFixed(2);                    
        // Construction de la chaine d'ingrédients :                     
        liste_ingredients.value += "|" + text_aliment + ";" + quantites;
        // Affichage de la table ingrédients sélectionnés : 
        ingredients();
    }
}
function ingredients(){
    alert(liste_ingredients);// Pour tester la construction de la chaine
    /* SUITE DU CODE ...
    var tableau_ingredients = liste_ingredients.value.split('|');*/
}

Et voici le code qui fonctionne parfaitement sans erreur en console, (pourtant sans déclaration de chaine_contrat):

var TotalContrat = 0;
document.getElementById("total_contrat").innerHTML = TotalContrat.toFixed(2);
var selectElmt = document.getElementById("prestation");
function plus_contrat() {
    if (prestation.value != 0 && prix.value != 0 && quantite.value != 0) {
        // index 0 - id_prestation
        var text_prestation = selectElmt.options[selectElmt.selectedIndex].text;
        text_prestation = text_prestation.replace(/[';|]/g,' ');
        // index 1 - désignation_prestation
        var ref_prestation = prestation.value;
        ref_prestation = ref_prestation.replace(/[';|]/g,' ');
        // index 2 - descriptif_prestation
        var text_descriptif = descriptif.value;
        text_descriptif = text_descriptif.replace(/[';|]/g,' ');
        // index 3 - Prix prestation
        var ref_prix = parseFloat(prix.value).toFixed(2);
        // index 4 - Quantité_prestation
        var ref_quantite = parseFloat(quantite.value).toFixed(2);
        chaine_contrat.value += "|" + ref_prestation + ";" + text_prestation + ";" + text_descriptif + ";" + ref_prix + ";" + ref_quantite;
        TotalContrat = TotalContrat + ref_prix * ref_quantite; 
        //total_contrat.value = TotalContrat.toFixed(2);// Pour une DIV
        document.getElementById("total_contrat").innerHTML = TotalContrat.toFixed(2); // Pour une SPAN
        document.getElementById("quantite").value = '';
        contrat();
    }
}

J'ai essayé ça en début de code : 

window.onload=function(){
    var liste_ingredients;
}

Mais ça ne change rien !
Une idée ?

Merci d'avance...

2 réponses

jordane45 Messages postés 38041 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 février 2024 4 622
30 juil. 2022 à 09:26

Bonjour                   

 liste_ingredients ... C'est quoi ? Un input dans ta page ? Car en effet.. tu n'initialises cette variable nui part..


.
Cordialement,
Jordane

1
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 17
30 juil. 2022 à 10:06

Ooooohh bon sang, évidemment !
J'était tellement focalisé sur une variable que j'en ai oublié le .value qui renvoit à un input du formulaire !!!!
Du coup : 

<input type="text" name="liste_ingredients" id="liste_ingredients" style="visibility: hidden;">

fonctionne nettement mieux que 

<input type="text" name="chaine_contrat" id="chaine_contrat" style="visibility: hidden;">

MERCI JORDAN !

0