IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Input checked de même identifiant ajax


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut Input checked de même identifiant ajax
    Bonjour,

    J'utilise Bootstrap et js pour activer/désactiver la publication d'article ou bien la mise en avant et je rencontre un conflit:

    1/ Je peux activer/désactiver sans problème si je mets en commentaire mon deuxième script pour la mise en avant des articles et donc seulement si mon premier script pour la publication est actif.

    2/ Si j'utilise les 2 en même temps cela ne fonctionnent pas pour la mise en avant et de façon aléatoire pour la publication.

    Je m'aperçois dans l'inspecteur que l'identification est la même pour mes 2 cases à cocher et je ne sais pas pourquoi alors, si vous pouviez me mettre sur la voie, je vous remercie d'avance.

    Script 1:
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // ACTIVATION EN AVANT (portcategory)
    let activerPC = document.querySelectorAll("#pc")
    for(let boutonPC of activerPC){
        boutonPC.addEventListener("click", function(){
            let xmlhttpPC = new XMLHttpRequest;
     
            xmlhttpPC.open("get", `/admin/article/activer/${this.dataset.pc}`)
            xmlhttpPC.send()
        })
    }
    Script 2:
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // ACTIVATION PUBLISHED 
     
    window.onload = () => {
        let activerPB = document.querySelectorAll("#pb")
        for(let boutonPB of activerPB){
            boutonPB.addEventListener("click", function(){
                let xmlhttpPB = new XMLHttpRequest;
     
                xmlhttpPB.open("get", `/admin/article/activer/${this.dataset.pb}`)
                xmlhttpPB.send()
            })
        }
     
    }

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                <td class="tdAdmin text-center" data-title="Publié">
                  <input id="pb" class="text-center form-check-input" type="checkbox" {{ (article.published) ? 'checked' : '' }} data-pb="{{ article.id }}" role="switch">
                </td>
                <td class="tdAdmin text-center" data-title="En avant">
                  <input id="pc" class="text-center form-check-input" type="checkbox" {{ (article.portcategory) ? 'checked' : '' }} data-pc="{{ article.id }}" role="switch">
                </td>

    Nom : checkedId.png
Affichages : 176
Taille : 58,2 Ko

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input id="pb" .../>
    <input id="pc"... />

    Les lignes sont générés par une boucle, et donc vous aurez plusieurs <input> avec le même id, alors qu'un id doit être unique dans une page HTML.

    C'est la raison pour laquelle ton script bug, parce qu'il récupère toujours les valeurs du premier élément (#pc ou #pb).

    Il faudrait séparer les id en les concaténant avec un chiffre ( ou article.id par exemple) #pc1,#pc2....,#pb1,#pb2...

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut
    Merci, j'ai donc essayé de cette façon en concaténant avec les chiffres 1 et 2 mais le comportement est le même:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                <td class="tdAdmin text-center" data-title="Publié">
                  <input id="pb" class="text-center form-check-input" type="checkbox" {{ (article.published) ? 'checked' : '' }} data-pb="{{ article.id ~ 1 }}" role="switch">
                </td>
                <td class="tdAdmin text-center" data-title="En avant">
                  <input id="pc" class="text-center form-check-input" type="checkbox" {{ (article.portcategory) ? 'checked' : '' }} data-pc="{{ article.id ~ 2 }}" role="switch">
                </td>

    Nom : code.png
Affichages : 149
Taille : 21,1 Ko

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    C'est les id qu'il faut modifier, pas les data-pc et data-pb.

    Mais attention, car cette modification va tout casser dans js, vu que tu récupères les input avec : let activerPC = document.querySelectorAll("#pc"); et let activerPB = document.querySelectorAll("#pb").

    il va falloir modifier le sélecteur "#pc" par [id^="pc"] : let activerPC = document.querySelectorAll("[id^='pc']"); afin de sélectionner tous les éléments ayant un id commençant par "pc", ou bien utiliser une class attribuée aux <chekbox>.

    idem pour "pb"...

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut
    J'ai fait ça mais le comportement reste le même y compris en ne gardant qu'un seul article de test dans ma table:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                <td class="tdAdmin text-center" data-title="Publié">
                  <input id="pb1" class="text-center form-check-input" type="checkbox" {{ (article.published) ? 'checked' : '' }} data-pb="{{ article.id }}" role="switch">
                </td>
                <td class="tdAdmin text-center" data-title="En avant">
                  <input id="pc2" class="text-center form-check-input" type="checkbox" {{ (article.portcategory) ? 'checked' : '' }} data-pc="{{ article.id }}" role="switch">
                </td>
    Le js (j'ai fais pareil pour l'autre)
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // ACTIVATION PUBLISHED 
     
    window.onload = () => {
        let activerPB = document.querySelectorAll("[id^=pb]")
        for(let boutonPB of activerPB){
            boutonPB.addEventListener("click", function(){
                let xmlhttpPB = new XMLHttpRequest;
     
                xmlhttpPB.open("get", `/admin/article/activer/${this.dataset.pb}`)
                xmlhttpPB.send()
            })
        }
     
    }

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Ok, maintenant on doit vérifier les actions une par une jusqu'à ce qu'on puisse retrouver l'erreur.

    • Au chargement de la page, vérifies que les data-pc et data-pb de ton article son correcte ou pas.
    • Mets un console.log() dans la fonction qui gère le clic sur les <checkbox> pour voir la valeur de data-(pb/pc) this.dataset.pb et this.dataset.pc
    • Que fait le script serveur `/admin/article/activer/${this.dataset.pb}` ?
    • Pourquoi tu envois une requête ajax alors que tu ne traites pas son retour ?

Discussions similaires

  1. [Dojo] Plusieurs item aevc même identifier dans Tree
    Par dbdb2719 dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 05/06/2009, 15h57
  2. 2 INPUT avec la même valeur
    Par uskiki85 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/01/2008, 17h14
  3. 2 inputs sur la même socket
    Par Goduak dans le forum Entrée/Sortie
    Réponses: 15
    Dernier message: 13/03/2007, 19h22
  4. Réponses: 16
    Dernier message: 19/07/2006, 00h16
  5. input portant le même nom
    Par cronos6 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2006, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo