[RESOLU] Mon selected ne fonctionne pas sur les mobiles

Mammouth du PHP | 506 Messages

27 janv. 2022, 07:09

bonjour a tous

cela fait de nouveau des jours que je me bats avec mon panier en javascript
il me manque juste un détail pour la finalisation
je suis confronté a un petit soucis

Mon panier en javascript fonctionne très bien sur pc

Lorsque je clic dans le select le nombre d'article passe a 1 et lorsque je choisi une quantité le data-qte prends la valeur de l élément value donc cela se comporte comme cela devrait l'etre

cela est correct

mais sur mon smartphone cela ne fonctionne pas correctement

Lorsque je clic dans le select le nombre d'article passe a 1
Lorsque je choisi une quantité le data-qte NE prends PAS la valeur de l élément value

je souhaiterais donc que lorsque je clic dans le select pour choisir une quantité que cela n'indique pas 1 mais prenne la valeur de l'élément value

voici un lien vers un exemple

https://phil.pecheperle.be/panier/index1.php

j'ai donc fouiller mon code pour savoir ou et comment cela se passait

j'ai donc la partie html qui permet de sélectionner le select

Code : Tout sélectionner

<select class="form-select btn btn-primary ajouter-panier" aria-label="2001" onchange="changeQte(this);" style="cursor:pointer;" data-nom="2001" data-prix="1.00" data-qte="1" data-checkbox="2001" > <option selected value="0">0 sachet dans le panier </option> <option value="1"> sachet dans le panier</option> <option value="1">1 sachet dans le panier</option> <option value="2">2 sachets dans le panier</option> <option value="3">3 sachets dans le panier</option> <option value="4">4 sachets dans le panier</option> <option value="5">5 sachets dans le panier</option> </select>
ce qui me fait des misères c'est ce data-qte="1" que j'ai mis a data-qte="0" mais cela n a rien change

lors du clic dans le select cette fonction est appelée et donc utilise le data-qte

Code : Tout sélectionner

$('.ajouter-panier').click(function(event) { event.preventDefault(); //on mets des variables a 0 var nom_option = ""; var prix_option = 0; var option_checkbox = $(this).data('checkbox'); //on regarde si le select est choisi if ($(this).data('select')) { var nom = $(this).data('nom') + " (" + document.getElementById(""+$(this).data('select')+"").value + ")" + nom_option; } else var nom = $(this).data('nom'); var prix = Number($(this).data('prix')) + (prix_option); //on test la date-qte partie qui m intéresse if ($(this).attr('data-qte')) { var qte_option = $(this).attr('data-qte'); MonPanier.ajouter_produit_dans_panier(nom, prix, qte_option); } else MonPanier.ajouter_produit_dans_panier(nom, prix, 1); afficherpanier(); }); $('.clear-panier').click(function(){ MonPanier.clearpanier(); afficherpanier(); });
a ce moment la console m affiche 1
je souhaiterais que ca soit l élément value qui soit pris en compte et donc n affiche rien puisque je n'ai aps encore fait de choix

ensuite je choisi la quantité avec le select value
a ce moment sur mon pc la valeur data-qte prends bien la valeur de l'element.value

par contre sur mon smartphone cela ne se passe pas

et le code est le suivant

Code : Tout sélectionner

function changeQte(element){ //on traite la variable qte var qte = element.value; var t = $(element); var label = t.attr("aria-label"); let data_qte = document.querySelector("[data-nom='"+ label +"']"); data_qte.removeAttribute("data-qte"); data_qte.setAttribute("data-qte", ""+qte+""); //on affiche le pop up let m; m = "\ Le panier compte désormais "; m += "<font color='red'><strong>"; m += event.target.getAttribute("data-qte"); m += "</strong></font>"; m += " sachet(s) de l'article \'"; m += event.target.getAttribute("data-nom"); //m += "\" a bien été ajouté au panier"; function insertAfter(newNode, existingNode) { existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling); } let e = document.createElement('div'); let s = ""; e.classList.add("maJolieAlert"); s += '<div><p>' + m + '</p>'; s += '<button type="button" onclick="fermeMaJolieAlert(event)">OK</button></div>'; e.innerHTML = s; insertAfter(e, event.target); } function fermeMaJolieAlert(event) { event.target.parentNode.parentNode.remove(); }

Eléphant du PHP | 385 Messages

31 janv. 2022, 00:06

Hello,

De ce que je vois la fonction changeQte c'est ici que le problème ce pose il faut regarder dans les erreurs javascript
https://android.stackexchange.com/quest ... ettings-do

Quel est le navigateur utilisé ? Les fichiers sont bien identiques ?

Avatar du membre
Mammouth du PHP | 1564 Messages

26 avr. 2022, 13:11

La bonne méthode serait d'écouter l'évenement sur onchange plutôt que click, ton code :

Code : Tout sélectionner

$('.ajouter-panier').click(function(event) {
deviendrait :

Code : Tout sélectionner

$('.ajouter-panier').on('change',function(event) { //puis $(this).val() pour récupérer la valeur sélectionnée
__________

Tant qu'à utiliser du jQuery, vas-y franchement :

lors de l'attribution de data-qte, met directement :

Code : Tout sélectionner

$(this).attr("data-qte", qte); //pour supprimer : removeAttr()
plutôt que

Code : Tout sélectionner

data_qte.setAttribute("data-qte", ""+qte+"");
___________
event est sans doute undefined dans la focntion changeQte(element)

____________

<font color="red"> est obsolète, remplace le par <span style="color:red">

Mammouth du PHP | 506 Messages

27 avr. 2022, 07:56

Bonjour
Merci pour vos réponses
Je suis désolé kevin je viens juste de voir ton message ce jour...
Merci aussi a two3d mais malheureusement un peu tard
Cela fait plus de 3 mois
j'ai du utiliser un autre mécanisme pour arriver a mes fins
Mais je pense revenir la dessus l'hiver prochain et tester cela , car pour l'instant je n'ai plus trop le temps

Mais encore mille fois merci