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 :

Erreur "is not a function" dans un écouteur


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut Erreur "is not a function" dans un écouteur
    Bonjour,

    Dans le code suivant, j'ai une erreur que je ne comprends pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Warning before deleting an user
    const del = window.document.querySelectorAll("[src='images/del.png']");
     
    del.addEventListener('click', function(e) {
    	let result = confirm("Etes-vous sûr de vouloir supprimer cet utilisateur ?");
    	if (result)
    		del.form.submit();
    	else
    		e.preventDefault();
    }, false );
    Note: L'image figure à chaque ligne d'un tableau d'utilisateur.
    J'ai l'erreur suivante:
    Uncaught TypeError: del.addEventListener is not a function

  2. #2
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    .querySelectorAll te renvoie un tableau (HTML collection) il te faut donc faire une boucle pour ajouter un listener à chacun des éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let elmts = document.querySelectorAll('my-elemts');
    elmts.forEach( elmt =>{
        elmt.addEventListener('click',()=>{
            //code
        }
    });

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Mais si tu n'as qu'un élément correspondant au sélecteur, document.querySelector suffit;
    D'ailleurs, si tu as plusieurs boutons-image, je ne vois pas comment tu indiques "quel utilisateur" va être supprimé.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par -Nikopol- Voir le message
    .querySelectorAll te renvoie un tableau (HTML collection) il te faut donc faire une boucle pour ajouter un listener à chacun des éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let elmts = document.querySelectorAll('my-elemts');
    elmts.forEach( elmt =>{
        elmt.addEventListener('click',()=>{
            //code
        }
    });
    Merci pour cette explication qui fonctionne. Par contre, j'ai du mal avec les fonctions fléchées et, malgré les explications de MDN, je n'arrive pas à transcrire mon code de façon plus classique.

    @javatwister
    D'ailleurs, si tu as plusieurs boutons-image, je ne vois pas comment tu indiques "quel utilisateur" va être supprimé.
    J'utilise tout simplement un dataset pour chaque image.

  5. #5
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 713
    Points : 1 594
    Points
    1 594
    Par défaut
    jour

    si tu ne suis pas la mode a de rare cas rien ne t'oblige a utiliser les fonction fléché qui plus est peuvent êtres déroutantes

    personnellement je trouve que les fonction fléché tout comme les fonctions anonyme on tendance a donner un code difficilement compréhensible une fonction devrait toujours avoir un nom afin de savoir a quoi elle correspond et ne pas être englobé dans un congloméra de code.
    Plus vite encore plus vite toujours plus vite.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    Merci pour ta réponse mais je n'arrive toujours pas à remplacer la fonction fléchées donnée par @-Nikopol- par un code plus compréhensible.

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(let i in del){
    	del[i].addEventListener('click', function(e) {
    		if (confirm("Etes-vous sûr de vouloir supprimer cet utilisateur ?")){
    			del[i].form.submit()
    		}
    		else e.preventDefault();
    	}, false)
    }

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    Merci, c'est impeccable!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. .length is not a function dans Firebug oO
    Par FotoXe33 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/08/2010, 19h20
  2. [OpenLayers] étendre de la class Map donne l'erreur this.registerEvents is not a function dans Firebug
    Par lermit dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 09/08/2010, 15h48
  3. Erreur : Is not a function ?
    Par DanTesS dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/12/2008, 11h32
  4. Erreur: createCaption not a function
    Par *.Har(d)t dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/11/2008, 17h40
  5. [AJAX] erreur: is not a function avec liste déroulante
    Par dr_octopus74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2007, 13h53

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