Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources 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 27/01/2012, 16h22   #1
Invité de passage
 
Aurélien LEFEBVRE
Inscription : novembre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Aurélien LEFEBVRE

Informations forums :
Inscription : novembre 2010
Messages : 11
Points : 3
Points : 3
Par défaut Récupérer valeur parent-enfant d'une div cliquée

Bonjour, je souhaiterais récupérer (à l'appel d'une fonction,) la valeur affichée dans une div mais je n'arrive pas à accéder à celle-ci calim2: :

fonction défaillante :
Code :
1
2
3
4
5
6
7
8
 
<script type="text/javascript">
function Alert_suppr(obj) {
	var Reference = obj.parentNode.getElementsByClassName("reference")[0].innerHTML;
	if (confirm("Etes vous certain(e) de vouloir supprimer cet article ?")) {
		window.location.href=('admin-index.php?reference='+Reference);}
}
</script>
code du tableau dans lequel je voudrais récupérer la valeur (dans la div de classe reference) :
Code html :
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
27
28
29
30
31
32
33
34
35
36
 
<table width="700" border="0" cellspacing="0" cellpadding="0" class="products">
            <tr>
              <td width="109" height="105" align="center">
                <div class="capture">
                  <table width="80" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td valign="middle" bgcolor="#FFFFFF"><img src="images/products/nature-wallpaper-1366x768-065.jpg" width="1366" height="768" alt="grerg" onclick="window.location.href=('admin-article.php?reference=TANKPEJS')" /></td>
 
                      </tr>
                    </table>
                </div>
              </td>
              <td width="361">
                <div class="titre" style="float:left;" onclick="window.location.href=('admin-article.php?reference=TANKPEJS')">grerg</div>
                <div class="reference"><b>Réf. : </b>TANKPEJS</div>
 
                <div class="description" style="height:auto;"><b>Famille : </b>sfgvsf</div>
                <div class="description" style="margin-top: 0px; height: 60px;overflow: hidden;"><b>Description : </b>grerg</div>
              </td>
              <td width="97" valign="bottom">
                <div class="dimensions" align="center"><b>Unités en stock : </b><br />2</div>
              </td>
 
              <td width="133" valign="top">
                <div class="delete-to-basket" style="margin: 2px 1px 12px auto;">
                  <a href="javascript:Alert_suppr(this);" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('delete-basket-cross-60','','images/suppr-cross-hover.png',1)">retirer l'article <img src="images/suppr-cross.png" width="13" height="13" alt="supprimer l'article" id="delete-basket-cross-60" /></a>
                </div>
                <div class="price">
                  <p>2.00 €</p>
                  </div>
                <div class="bouton-1" onclick="window.location.href=('admin-article.php?reference=TANKPEJS')">Voir les détails</div>
 
              </td>
            </tr>
</table>

Je dois récupérer la référence dans la div (de classe référence) pour la passer en paramètre sachant que ce tableau comporte plusieures lignes avec chacun une div de classe référence (c'est pour celà que c'est une classe et non un id après il m'est possible d'ajouter comme id à cette div la référence si vraiment c'est necessaire).

Encore une fois je remercie d'avance et grandement la communauté de son soutient
lefebvresdesigns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 23h07   #2
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 873
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 873
Points : 1 382
Points : 1 382
ton élément c'est la balise <a>

donc sa parente c'est un <div>

(qui ne contient pas d'objet avec la class "reference")

sa parente à elle c'est un <td>

(qui de même)

qui a encore pour parente un <tr>

(qui elle contient bien un enfant avec pour class "reference")

il te suffit donc de rajouter qqes remontées dans ton arbre :

Code :
var Reference = obj.parentNode.parentNode.parentNode.getElementsByClassName("reference")[0].innerHTML;
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 23h40   #3
Membre actif
 
Avatar de eckerdecker
 
Inscription : décembre 2009
Messages : 132
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2009
Messages : 132
Points : 154
Points : 154
Citation:
qui ne contient pas d'objet avec la class "reference"
J'allais le dire, et je voulais te proposer une petite méthode récursive pour que le tout soit plus facilement maintenable et je viens de découvrir un autre problème dans ton code.

Tu appelles ta méthode depuis l'attribut href de ton lien, or dans ce cas précis this ne sera pas la balise <a> cliquée mais l'objet window, pour que ce soit bien l'élément cliqué qui soit passé à ta fonction Alert_suppr() il faut que tu le fasses dans le onclick.

Code :
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function Alert_suppr(obj) {
	var Reference = getClosestRef(obj).innerHTML;
	if (confirm("Etes vous certain(e) de vouloir supprimer cet article ?")) {
		window.location.href=('admin-index.php?reference='+Reference);}
}
function getClosestRef(obj) {
    var ret = obj.getElementsByClassName('reference');
    return ret.length > 0 ? ret[0] : getClosestRef(obj.parentNode);
}
</script>
Si tu appelles bien Alert_suppr depuis le onclick ca va le faire.

Par contre dans ton élément class="reference" tu n'aura pas directement ta référence mais "<b>Réf. : </b>TANKPEJS" ce qui n'est pas forcément ce que tu cherches

Note : pourquoi ne pas directement passer ta référence en paramètre de ta fonction sinon ... ?
eckerdecker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 10h14   #4
Invité de passage
 
Aurélien LEFEBVRE
Inscription : novembre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Aurélien LEFEBVRE

Informations forums :
Inscription : novembre 2010
Messages : 11
Points : 3
Points : 3
j'ai tenté :
Code :
1
2
 
var Reference = obj.parentNode.parentNode.parentNode.getElementsByClassName("reference")[0].innerHTML;
mais il me dit : obj.parentNode is undefined

j'ai aussi tenté :
Code :
1
2
3
4
5
6
7
8
9
10
 
function Alert_suppr(obj) {
	var Reference = getClosestRef(obj).innerHTML;
	if (confirm("Etes vous certain(e) de vouloir supprimer cet article ?")) {
		window.location.href=('admin-index.php?reference='+Reference);}
}
function getClosestRef(obj) {
    var ret = obj.getElementsByClassName('reference');
    return ret.length > 0 ? ret[0] : getClosestRef(obj.parentNode);
}
mais il me dit obj.getElementsByClassName is not a function

quand à :
Citation:
Note : pourquoi ne pas directement passer ta référence en paramètre de ta fonction sinon ... ?
j'ai tenté :
Code html :
<a href="admin-index.php?reference=<?php echo $row_Recordset1['Reference'];?>"
mais je n'ai plus de fenêtre de confirmation...

je préférais pourtant la première solution, toutefois si besoin est (pour plus de simplicité) je peux ajouter id dont la valeur sera la référence à la div contenant le <a> sur lequel on a cliqué mais il faudrait m'exppliquer comment récupérer l'attribut (le id qui sera la référence)
lefebvresdesigns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 10h45   #5
Membre actif
 
Avatar de eckerdecker
 
Inscription : décembre 2009
Messages : 132
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2009
Messages : 132
Points : 154
Points : 154
Citation:
mais il me dit : obj.parentNode is undefined
...
mais il me dit obj.getElementsByClassName is not a function
Tu as essayé quelque chose comme ça :
Code :
<a href="javascript:void(0)" onclick="Alert_suppr(this);">
?

Citation:
mais je n'ai plus de fenêtre de confirmation...
je voulais dire :
Code :
<a href="javascript:Alert_suppr('<?php echo $row_Recordset1['Reference'];?>')">
avec
Code :
1
2
3
4
5
6
<script type="text/javascript">
function Alert_suppr(Reference) {
	if (confirm("Etes vous certain(e) de vouloir supprimer cet article ?")) {
		window.location.href=('admin-index.php?reference='+Reference);}
}
</script>
Sinon tu peux aussi faire :
Code :
<a href="admin-index.php?reference=<?php echo $row_Recordset1['Reference'];?>" onclick="return confirm('Vous êtes sûr ?')">
eckerdecker est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/01/2012, 10h47   #6
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 873
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 873
Points : 1 382
Points : 1 382
Comme te l'as dis eckerdecker :

Citation:
Tu appelles ta méthode depuis l'attribut href de ton lien, or dans ce cas précis this ne sera pas la balise <a> cliquée mais l'objet window, pour que ce soit bien l'élément cliqué qui soit passé à ta fonction Alert_suppr() il faut que tu le fasses dans le onclick.
Tu utilises ton lien pour faire une injection javascript dans l'url, tu perds donc ton objet dans le code injecté.

(il faut aussi passer le "this" à la fonction en question, ou l'événement..)

Tu dois faire ça proprement en utilisant l’évènement approprié : onclick :

Code :
<a href=# onclick="Alert_suppr(this);">supprimer</a>


mais pour être vraiment propre tu devrais déjà générer le lien en php(puisque j'ai vu que c'est le langage que tu utilises) et le onclick devrait juste autoriser ou non l'action :

Code :
<a href="admin-index.php?reference=REF_OBTENU_EN_PHP" onclick="return confirm('Etes vous certain(e) de vouloir supprimer cet article ?');">supprimer</a>

sinon une autre solution plus propre que la première mais en restant en javascript uniquement :

Code :
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function Alert_suppr(obj) {
	var Reference = obj.parentNode.parentNode.parentNode.getElementsByClassName("reference")[0].innerHTML;
	if (confirm("Etes vous certain(e) de vouloir supprimer cet article ?")) {
		this.href=('admin-index.php?reference='+Reference);
		return true;
	}
	return false;
}
</script>
<a href="#" onclick="return Alert_suppr(this);">supprimer</a>

EDIT: AARRRG pris de vitesse par eckerdecker (enfin, heureux de voir qu'on est sur la même longueur d'ondes dans nos solutions. ^^
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 10h57   #7
Membre actif
 
Avatar de eckerdecker
 
Inscription : décembre 2009
Messages : 132
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2009
Messages : 132
Points : 154
Points : 154
Citation:
AARRRG pris de vitesse par eckerdecker (enfin, heureux de voir qu'on est sur la même longueur d'ondes dans nos solutions. ^^
^^

Selon moi, LA meilleure solution serait de séparer le code javascript du HTML, mais ajouter des écouteurs onclick en js pur c'est la barbe (je suis un adepte de jQuery, c'est plus fort que moi maintenant ^^)
eckerdecker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 10h58   #8
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Bonjour à tous,
vu la structure de ton document, je chercherais la TR parent
Code :
1
2
3
4
  var oElem = obj.parentNode;
  while( oElem && oElem.tagName != 'TR'){
    oElem = oElem.parentNode;
  }
afin d'avoir la référence de celle ci pour rechercher l'élément contenant la référence.

Comme il a été dit, il te faut faire l'appel sur le onclick afin d'avoir accès à l'objet cliqué
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 11h24   #9
Invité de passage
 
Aurélien LEFEBVRE
Inscription : novembre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Aurélien LEFEBVRE

Informations forums :
Inscription : novembre 2010
Messages : 11
Points : 3
Points : 3
j'ai pas testé toutes les solutions car là elles se multiplient (j'en prends une combinée à une autre et ainsi de suite ) bref j'ai trouvé mon bonheur parmi vos solution (PS euh la toute dernière par contre elle a pas marché, mais peu importe vu que je suis parvenu à mes fin et ce sans trop de code). donc je vous donne la solution pour laquelle j'ai opté :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
<script type="text/javascript">
function Alert_suppr(obj) {
	var Reference = obj.parentNode.parentNode.parentNode.getElementsByClassName("reference")[0].innerHTML;
	if (confirm()) {
		this.href=('admin-index.php?reference='+Reference);
		return true;
	}
	return false;
}
</script>
Code html :
1
2
 
<a href="admin-index.php?reference=<?php echo $row_Recordset1['Reference']; ?>" onclick="return confirm('Etes vous certain(e) de vouloir supprimer cet article ?');">supprimer</a>

Je remercie encore et toujours la communauté d'être présente pour servir nos causes ! franchement chapeau-bas !
lefebvresdesigns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 11h32   #10
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Citation:
PS euh la toute dernière par contre elle a pas marché, mais peu ...
elle te permettrait simplement de remplacer obj.parentNode.parentNode.parentNode. dans le cas ou tu rajouterais un conteneur autour de ta balise A.

Perso je trouve qu'il y a beaucoup de DIV inutiles dans ta conception, mais si cela fonctionne...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 11h40   #11
Invité de passage
 
Aurélien LEFEBVRE
Inscription : novembre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Aurélien LEFEBVRE

Informations forums :
Inscription : novembre 2010
Messages : 11
Points : 3
Points : 3
Citation:
Envoyé par NoSmoking Voir le message
elle te permettrait simplement de remplacer obj.parentNode.parentNode.parentNode. dans le cas ou tu rajouterais un conteneur autour de ta balise A.

Perso je trouve qu'il y a beaucoup de DIV inutiles dans ta conception, mais si cela fonctionne...
ben en fait nan elles sont toutes utiles au design tiens si tu veux je te joins le fichier php et le fichier styles.css (tu comprendras mieux pourquoi àsinon c'est sur j'ai préféré les div plutôt que les cellules de tableau)
Fichiers attachés
Type de fichier : php admin-articles.php (14,4 Ko, 2 affichages)
Type de fichier : css styles.css (43,7 Ko, 2 affichages)
lefebvresdesigns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 11h43   #12
Membre actif
 
Avatar de eckerdecker
 
Inscription : décembre 2009
Messages : 132
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2009
Messages : 132
Points : 154
Points : 154
Citation:
Envoyé par lefebvresdesigns Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<script type="text/javascript">
function Alert_suppr(obj) {
	var Reference = obj.parentNode.parentNode.parentNode.getElementsByClassName("reference")[0].innerHTML;
	if (confirm()) {
		this.href=('admin-index.php?reference='+Reference);
		return true;
	}
	return false;
}
</script>
Code html :
1
2
 
<a href="admin-index.php?reference=<?php echo $row_Recordset1['Reference']; ?>" onclick="return confirm('Etes vous certain(e) de vouloir supprimer cet article ?');">supprimer</a>
Ton lien n'utilises pas ta fonction javascript, tu peux la supprimer !
eckerdecker est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/01/2012, 11h47   #13
Invité de passage
 
Aurélien LEFEBVRE
Inscription : novembre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Aurélien LEFEBVRE

Informations forums :
Inscription : novembre 2010
Messages : 11
Points : 3
Points : 3
Citation:
Envoyé par eckerdecker Voir le message
Ton lien n'utilises pas ta fonction javascript, tu peux la supprimer !
très très bonne remarque ! je fais ça de suite, moins il y a de code, mieux c'est ! encore merci de m'inculquer vos compétences c'est grâce à vous que j'évolue !
lefebvresdesigns 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 17h02.


 
 
 
 
Partenaires

Hébergement Web