Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2011, 17h57   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2002
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 73
Points : 12
Points : 12
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 :
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 :
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 ?
Mailgifson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 08h50   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 270
Points : 7 270
Bonjour,

Utilise event.stopPropagation().

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 11h24   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2002
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 73
Points : 12
Points : 12
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'... ?
Mailgifson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 21h41   #4
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
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>.
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 10h00   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2002
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 73
Points : 12
Points : 12
Non, ça ne fonctionne pas non plus
Mailgifson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 22h29   #6
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
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 :
<th align=left><button onclick="SupprimerRequete('<%=idServeur%>','<%=idDictionnaire%>','<%=idRequete%>')">Supprimer toutes les publications de la requête : <%=idRequete%>.</button></th>
Par :
Code :
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 :
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;
});
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 10h15   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2002
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 73
Points : 12
Points : 12
Nikel, ça fonctionne et en plus c'est plus propre au niveau du code.

Merci champion


Par contre, je ne comprends pas comment il arrive à faire la relation entre data-id-serveur="<%=idServeur%>" et obj.data("idServeur")


Pi : Le <th> c'était un essai
Mailgifson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 21h14   #8
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

C'est gérer par jQuery : http://api.jquery.com/data/

Les attributs "data-x" ou "data-x-y" ou "data-x-y-z" (se limiter à trois noms semble raisonnable) doivent être écrit en minuscule.

Ce type d'attribut vient du HTML5, mais ils sont gérés par jQuery depuis longtemps (1.2.3), mais la méthode d'écriture des attributs a été modifiée par la version 1.6

jQuery UI Mobile utilise intensivement ce type d'attribut.

Avec 1.6, pour accéder à l'attribut "data-un-exemple" on doit écrire $(sélecteur).data("unExemple").

Il y a des exemples d'utilisation dans la FAQ jQuery.
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 22h57   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2002
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 73
Points : 12
Points : 12
Merci pour l'info
Mailgifson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h56.


 
 
 
 
Partenaires

Hébergement Web