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 08/02/2011, 20h07   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 1
Points : 1
Par défaut Dom et jquery

Bonjour,

Voila je voudrai lors d'un appuie sur un lien "Editer" dans un tableau qui liste des images :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<tr>
  <td>
	<?php echo $nomPhoto ?>
  </td>
  <td>
	<a href="#"><img src="<?php echo $rep.$nomFichier; ?>"></a>
  </td>
  <td>
      <a href="#" id="" class="boutonEdit">Editer</a>&nbsp;|&nbsp;<a href="#">Supprimer</a>
  </td>
</tr>

Récupérer certaines informations contenu dans des champs img et texte des deux td précédent, pour les envoyé dans un formulaire d'edition qui apparait au dessous du tableau.

Je pensais faire simplement un

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$(".boutonEdit").click(function(){
		image=this.parentNode;
		image=image.previousSibling;
		image=image.lastChild;
 
		nom=this.parentNode;
		nom=nom.previousSibling;
		nom=nom.previousSibling;
		nom=nom.firstChild;
		nom=nom.firstChild;
			});
Le this ne fait référence à rien, et je ne comprend pas vraiment pourquoi :/
mower666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 20h26   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
this fait référence à ta fonction anonyme
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 21h13   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 1
Points : 1
Comment je peux faire en sorte de lui dire d'enregistrer l'élément sur lequel je clic ?
mower666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 23h41   #4
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Bonjour,

si vous voulez n'utiliser que l'élément cliqué et non tout ceux qui ont la classe ".boutonEdit", alors vous devez utiliser les propriétés de l'objet event passé en paramètre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$(".boutonEdit").click(function(event) {
	var target = $(event.target); // Le bouton cliqué uniquement
	var image = target.parentNode;
	image = image.previousSibling;
	image = image.lastChild;
 
	var nom = $(event.target).parentNode;
	nom = nom.previousSibling;
	nom = nom.previousSibling;
	nom = nom.firstChild;
	nom = nom.firstChild;
});
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h43   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 1
Points : 1
Super la classe ça marche (en retirant un $) merci
Seulement j'ai un autre soucis j'arrive à récuperer la valeur texte donné par
Code :
<?php echo $nomPhoto ?>
dans le premier td (j'ai vérifié avec un alert qui semble prendre en compte des saut de lignes Oo) et il m'est impossible d'envoyer cette derniere dans un champs type="text" je n'ai pas d'erreur dans la console pourtant suis-je forcé de stocker le
Code :
<?php echo $nomPhoto ?>
dans un type="text" également?
mower666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 12h40   #6
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Un peu de code vaudra mieux qu'un long discours, je n'ai pas compris ce que vous souhaitez faire.

Postez un bout de code
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 13h07   #7
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 1
Points : 1
Donc en fait je navigue dans ce tableau :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<tr>
<td>
	<input type="text" value="<?php echo $nomPhoto ?>" size="15">
</td>
<td>
	<a href="#"><img" src="<?php echo $rep.$nomFichier; ?>"></a>
</td>
<td>
	<a href="#" class="boutonEdit">Editer</a>&nbsp;|&nbsp;<a href="#">Supprimer</a>
</td>
</tr>
Au clic sur le liens Editer je vais rechercher le value du type="text" du premier td ainsi que le src de l'image du second td

avec un script js

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//la fonction edite affiche le formulaire et rempli les champs nom et type automatiquement
		ajout=document.getElementById('ajoutPhoto');
		nomEdit=document.getElementById('nomEdit');
		apercuEdit=document.getElementById('apercuEdit');
 
		var target = (event.target); // Le bouton cliqué uniquement
 
		//On récupere le src de l'image pour l'aperçu de l'édition
		var image = target.parentNode;
		image = image.previousSibling;
		image = image.previousSibling;
		image = image.firstChild;
		image = image.nextSibling;
		image = image.firstChild;
 
		//On récupère le nom de l'image 
		var nom = (event.target).parentNode;
		nom = nom.parentNode;
		nom = nom.firstChild;
		nom = nom.nextSibling;
		nom = nom.firstChild;
		nom = nom.nextSibling;
 
		//On attribue leurs valeurs aux champs édition
		apercuEdit.src=image.src;
		nomEdit.value=nom.value;
et je rempli donc ce tableau ci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<tr>
	<td>
		<select id="filtreType" name="typeProduit">			
	        </select>
</td>
<td>
	<input type="text" size="15" value="" id="nomEdit" name="nomEdit">
</td>
<td>
	<img src="" id="apercuEdit">
</td>
</tr>
Ca fonctionne mais au lieu de récupérer le value du type="text" du premier td du premier tableau j'aurai voulu récupérer simplement une chaine de caractère (ce que j'avais fait au début) seulement au moment de remplir le
Code :
<input type="text" size="15" value="" id="nomEdit" name="nomEdit">
J'obtenai un champs vide et lorsque je faisais alert(ma chaine de caractere) j'obtenais bien cette dernière mais j'avais l'impression que des lignes était sauté au lieu de m'afficher

Code :
1
2
 
le nom de la photo
j'avais un truc du genre

Code :
1
2
3
4
5
6
 
 
 
 
 
le nom de la photo
Et donc je me demande comment j'aurai pu le récuperer si c'était toujours une chaine de caractères.
C'est juste par curiosité maintenant en fait
mower666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 18h20   #8
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Tout ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
		var target = (event.target); // Le bouton cliqué uniquement
 
		//On récupere le src de l'image pour l'aperçu de l'édition
		var image = target.parentNode;
		image = image.previousSibling;
		image = image.previousSibling;
		image = image.firstChild;
		image = image.nextSibling;
		image = image.firstChild;
 
		//On récupère le nom de l'image 
		var nom = (event.target).parentNode;
		nom = nom.parentNode;
		nom = nom.firstChild;
		nom = nom.nextSibling;
		nom = nom.firstChild;
		nom = nom.nextSibling;
Pour ça :

Code :
1
2
3
4
5
6
7
8
9
10
 
// Si l'image est unique dans la table :
var image = $(target).closest("table").find("img").first();
 
var src = $(image).attr("src");
 
// Si l'input text est unique dans la table :
var inputText = $(target).closest("table").find("input:text").first();
 
var textValue = $(inputText).val();
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 22h13   #9
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 1
Points : 1
*_* Mais c'est magique ce truc :O J'ai commencé jquery hier je connais pas trop les fonctions encore ^^ Mais ça va chercher l'élément de la fonction find() le plus proche du target dans la table en gros ?
mower666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 20h48   #10
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Citation:
Envoyé par mower666 Voir le message
*_* Mais c'est magique ce truc :O J'ai commencé jquery hier je connais pas trop les fonctions encore ^^
Et encore, c'est la toute base, vous n'avez encore rien vu

Citation:
Envoyé par mower666 Voir le message
Mais ça va chercher l'élément de la fonction find() le plus proche du target dans la table en gros ?
Rien de tel que la documentation pour ça !

.closest() : remonte les éléments du DOM jusqu'a trouver le sélecteur spécifié (donc ici, la table).

.find() : va trouver tous les descendants répondant au sélecteur spécifié (donc ici, l'image). Si vous avez plusieurs balises <img> dans votre table, ça va tous vous les retourner sous forme de tableau.

Je vous encourage vivement à faire un tour du côté de l'API jQuery où se trouve un tas de fonction de base très, très intéressante
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. 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 06h06.


 
 
 
 
Partenaires

Hébergement Web