var ligne=bouton.substr(0,1)

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
jeantitou
Messages : 2
Enregistré le : 01 août 2021, 17:28

var ligne=bouton.substr(0,1)

Message par jeantitou » 01 août 2021, 17:39

bonjour ,
je plante sur une fonction
function verif(bouton) {
var ligne = bouton.substr(0, 1);
var colonne = bouton.substr(2, 1);

tabjeu[ligne][colonne] = tabResultat[ligne][colonne];
afficherTableau();
}

le but est quand je click sur une case de m'afficher une image
message d'erreur
Uncaught TypeError: bouton.substr is not a function
at verif (main.js:77)
la ligne 77 correspond a var ligne
merci bcp si vous pouvez me dire d'ou cela peut venir

Avatar du membre
webmaster
Administrateur du site
Messages : 396
Enregistré le : 28 févr. 2017, 15:19

Re: var ligne=bouton.substr(0,1)

Message par webmaster » 01 août 2021, 18:00

Bonjour,

L'erreur signifie que la variable bouton n'est pas une chaîne de caractères
Si bouton est un élément de formulaire, il faut remplacer par :
var ligne = bouton.value.substr(0, 1);
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

jeantitou
Messages : 2
Enregistré le : 01 août 2021, 17:28

Re: var ligne=bouton.substr(0,1)

Message par jeantitou » 01 août 2021, 18:12

merci webmaster pour votre réponse rapide mais ce n'est pas un formulaire je mets mon main.js ce sera + clair
const divResultat = document.querySelector("#resultat");

var tabjeu = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
];

var tabResultat = [
[1, 4, 3, 4],
[1, 2, 3, 2],
[7, 8, 6, 5],
[8, 7, 5, 6],
];

afficherTableau();

function afficherTableau() {
var txt = "";
for (var i = 0; i < tabjeu.length; i++) {
txt += "<div>";

for (var j = 0; j < tabjeu.length; j++) {
if (tabjeu[j] === 0) {
txt += "<button class='btn btn-primary m-2' style='width:100px;height:100px' onclick='verif(" +
i +
" -" +
j +
")'>Afficher</button>";

} else {
txt +="<img src='" +getImage(tabjeu[j]) +"'style='width:100px;height:100px'class='m-2'>";

}
}
txt += "</div>";
}

divResultat.innerHTML = txt;
}
function getImage(valeur) {
var imgTxt = "image/"; //var ImgTxt ="image/ au lieu de taper a chaque fois image"
switch (valeur) {
case 1:
imgTxt += "elephant.png";
break;
case 2:imgTxt += "giraffe.png";
break;
case 3:imgTxt += "hippo.png";
break;
case 4:imgTxt += "monkey.png";
break;
case 5: imgTxt += "panda.png";
break;
case 6:imgTxt += "parrot.png";
break;
case 7:imgTxt += "penguin.png";
break;
case 8:imgTxt += "rabbit.png";
break;
default:
console.log("cas non pris en compte");
}
return imgTxt;
}
function verif(bouton) {
var ligne = bouton.substr(0, 1);
var colonne = bouton.substr(2, 1);

tabjeu[ligne][colonne] = tabResultat[ligne][colonne];
afficherTableau();
}
merci encore

Avatar du membre
webmaster
Administrateur du site
Messages : 396
Enregistré le : 28 févr. 2017, 15:19

Re: var ligne=bouton.substr(0,1)

Message par webmaster » 02 août 2021, 11:14

J'ai repéré 2 erreurs dans le code :

Code : Tout sélectionner

if (tabjeu[i][j] === 0) { // Ici il faut 2 indices, sinon on est jamais égal à 0

Code : Tout sélectionner

txt += "<button class='btn btn-primary m-2' style='width:100px;height:100px' onclick=\"verif('" + i + " -" +j + "')\">Afficher</button>";
Et ici il faut alterner les " et ' pour marquer la chaine de caractères avec comme résultat :

Code : Tout sélectionner

<button class="btn btn-primary m-2" style="width:100px;height:100px" onclick="verif('3 -2')">Afficher</button>
et non pas

Code : Tout sélectionner

<button class="btn btn-primary m-2" style="width:100px;height:100px" onclick='verif(3 -2)'>Afficher</button>
qui n'est pas une chaine dans la paramètre passé à la fonction verif()
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

Répondre