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 :

Conflit entre deux actions


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut Conflit entre deux actions
    Bonjour à tous,

    Voici mon problème, je n'arrive pas à m'en sortir :

    Je construit un tableau HTML grâce à une Servlet/JSP. Ce tableau possède 5 colonnes, dont la dernière contient sur chacune des lignes un bouton qui permet de supprimer la ligne en question.

    Deux actions sont possibles sur chacune des lignes :
    - Un clic sur une ligne permet d'accéder à un niveau plus détaillé (je fais, en réalité, un appel d'une nouvelle Servlet/JSP).
    - Un clic sur le bouton "Supprimer" de ma ligne, qui permet de supprimer ma ligne du tableau.

    Mon problème est que lorsque j'appuie sur mon bouton, les deux actions sont appliquées : Le clic sur la ligne et le clic sur le bouton.

    Voilà comment est géré le clic sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    			$(document).ready( function() {
    				var oTable = $('#monTableau').dataTable( {
    					"bJQueryUI": true,
    					"sPaginationType": "full_numbers",
    					"bSortClasses": false,
    					"iDisplayLength": 50
    				} );
     
    				/* Gestion des évènements */
    				$('#monTableau tbody tr').live('click', function () {
     
    					var nTds = $( 'td', this );
    				        alert( nTds );
    					var sServeur = $(nTds[0]).text();
    					var sDictionnaire = $(nTds[1]).text();
    					var sRequete = $(nTds[2]).text();
     
    					ListeDesPublications( sServeur, sDictionnaire, sRequete );
    				} );
    			} );
    Voilà comment est géré le clic sur le bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <th align=left><button onclick="SupprimerRequete('<%=idServeur%>','<%=idDictionnaire%>','<%=idRequete%>')">Supprimer toutes les publications de la requête : <%=idRequete%>.</button></th>
    Comment ne pas appliquer ma fonction sur la ligne quand l'utilisateur appuie sur le bouton ?

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Utilise event.stopPropagation().

    A+.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    J'ai ajouté un event.stopPropagation() sur le clic du bouton, mais ça ne change rien.

    Comment être sûr qu'il exécute bien mon bouton avant le ('#monTableau tbody tr').live('click'... ?

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    C'est le clic sur le bouton qui se propage dans le DOM et qui est repris par live(). En JavaScript, vous pouvez essayer la solution du return false : <th align=left><button onclick="SupprimerRequete('<%=idServeur%>','<%=idDictionnaire%>','<%=idRequete%>');return false">Supprimer toutes les publications de la requête : <%=idRequete%>.</button></th>.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    Non, ça ne fonctionne pas non plus

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Bizarre !

    On peut voir un bout de la structure de votre table. Un bouton sur chaque ligne, mais dans un th ? C'est normal ?

    Et le contenu de la fonction SupprimerRequete(). Cela déclenche-t-il une modification du contenu de la table.

    On peut aussi travailler uniquement en jQuery. Essayer pour un seul bouton.

    Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <th align=left><button onclick="SupprimerRequete('<%=idServeur%>','<%=idDictionnaire%>','<%=idRequete%>')">Supprimer toutes les publications de la requête : <%=idRequete%>.</button></th>
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <th align=left>
    	<button class="btnClickClass" data-id-serveur="<%=idServeur%>" data-id-dictionnaire="<%=idDictionnaire%>" data-id-requete="<%=idRequete%>">
    		Supprimer toutes les publications de la requête : <%=idRequete%>.
    	</button>
    </th>
    Code jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $(".btnClickClass").click(function(){
    	var obj = $(this);
     
    	SupprimerRequete(obj.data("idServeur"), obj.data("idDictionnaire"), obj.data("idRequete"));
     
    	return false;
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. [MooTools] Conflit entre deux scripts utilisant du Mootools
    Par kurkaine dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 24/02/2011, 19h59
  2. Conflit entre deux js dans une page HTML (inclure plusieurs js)
    Par karinemariejeanne dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/06/2007, 16h31
  3. [MySQL] conflit entre deux fonction while
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/12/2006, 12h56
  4. [MySQL] Conflit entre deux fonction WHILE
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2006, 18h15
  5. Réponses: 3
    Dernier message: 07/07/2006, 18h00

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