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

jQuery Discussion :

Lien avec onclick ne s'exécute pas


Sujet :

jQuery

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Points : 136
    Points
    136
    Par défaut Lien avec onclick ne s'exécute pas
    Bonjour à tous,

    J'ai un projet Symfony 5, et mon problème concerne Jquery, d'où mon sujet dans cette rubrique.

    Sur une page, j'ai un lien avec un bouton qui ajoute des lignes à mon formulaire, les lignes sont numérotées par un compteur.
    Et sur chaque ligne, j'ai un lien pour supprimer cette ligne, que je repère par son compteur.

    Mon problème se situe sur la suppression d'une ligne. J'ai un lien avec un onclick qui appelle une fonction Jquery.
    Quand mon code de ma fonction est présent dans mon template Twig de ma page, ça marche bien.

    Code dans ma boucle dans ma vue Twig :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#prixProduit-fields-list" class="btn btn-danger" onclick="supprimer_ligneproduit({{ compteur }})">Supprimer</a>

    Code de mon bouton dans ma vue Twig, et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script>
    	function supprimer_ligneproduit(counter) {
    		var bloc_a_supprimer = 'id_ligneproduit_'+counter;
    		var elem = document.getElementById(bloc_a_supprimer);
    		elem.parentNode.removeChild(elem);
    		return false;
    	}
    </script>
    Maintenant, je veux regrouper tout mon code Jquery dans un fichier monprojet.js, que je compile avec webpack encore.
    Et là, ma fonction ne marche plus, le clic sur le bouton ne fait rien.

    J'ai essayé en encapsulant ma fonction avec le code suivant, sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(document).ready(function supprimer_ligneproduit(counter) {
    	...
    });
    Et le code qu'on m'a indiqué dans le forum Symfony hier, mais là, ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.addEventListener('load', function supprimer_ligneproduit(counter) {
    	...
    });
    Et j'ai essayé plein d'autres trucs foireux, sans succès.

    Merci d'avance pour votre aide !

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Si vous utilisez un attribut onclick="", il ne faut pas encapsuler le code dans un événement jQuery.ready().

    Donc soit vous écrivez directement dans fichier javascript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     function supprimer_ligneproduit(counter) {
    	  alert('clické : '+ counter);
      }

    Soit vous retirez l'attribut onclick de votre HTML en ayant un moyen d'identifier les liens (classe ou attribut) + un attribut data-id par exemple pour passer l'ID
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="#prixProduit-fields-list" class="btn btn-danger action-delete" data-id="1">Supprimer 1</a>
     
    <a href="#prixProduit-fields-list" class="btn btn-danger action-delete" data-id="2">Supprimer 2</a>
    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('body').on('click', '.action-delete', function() {
      alert('Lien cliqué : ' +  $(this).data('id'));
    });

    L'avantage de cette méthode est que je la trouve plus propre mais aussi que les liens resteront clickables même s'ils ont ajouté dans le DOM après le chargement du Javascript.
    Voici cet exemple en live : https://codepen.io/DarkStar123456/pen/ZEJdQBm

    Attention que votre façon d'utiliser jQuery.ready() n'est pas bonne dans ce cas.
    On écrit plutôt habituellement comme ceci :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(document).ready(function() {
      // ici commencent les instructions
      // Sinon dans votre exemple, la fonction était automatiquement appelée à chaque chargement de page et plus jamais après
    });

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Points : 136
    Points
    136
    Par défaut
    Merci beaucoup pour votre réponse et vos exemples !

    Ok pour le onclick, que j'ai supprimé, et j'ai suivi votre façon de faire : c'est nickel !

    Merci encore, ça m'a beaucoup aidé

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

Discussions similaires

  1. .jar créé avec Eclipse ne s'exécute pas.
    Par francky74 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 04/08/2015, 22h26
  2. Réponses: 2
    Dernier message: 27/01/2011, 16h42
  3. Réponses: 15
    Dernier message: 27/01/2011, 11h00
  4. Lien avec image ne fonctionnant pas
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/07/2007, 18h34
  5. Changement d'images avec onclick ou par lien
    Par zubaran dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/07/2006, 22h09

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