11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'aimerai savoir comment faire pour me sortir de ce problème :


<a href="#" onclick="javascript:AFFICHE('<h4>Titre</h4>
					<h5>Sous-Titre</h5>
					<p>Mon Paragraphe.</p>
					<a href="mon_lien">En savoir plus</a>');"></a>


Sachant que le javascript "AFFICHE" affiche dans un div le texte avec
un h4, un h5, un p ... et donc un a href="mon_lien" qui ne peut marcher puisque les "" sont déjà présent dans le onclick="javascript:AFFICHE('la-partie-a-afficher-dans-le-div');"

Merci d'avance.
Deux <a> imbriqués, c'est interdit. LE <a> qui englobe les titres et le paragraphe est superflu ou bien il faut le remplacer par autre chose comme <div>.

Quoi qu'il arrive, tu risques d'avoir des problèmes si deux zones cliquables sont superposées. Il vaudrait mieux que tu évites ça.

Quel est l'intérêt d'avoir une énorme zone cliquable plutôt qu'un lien tout simple ?
Bonjour,
J'ai définit le corps de la méthode AFFICHE dans le bloc <script> comme suit:
function AFFICHE() {
//Retour a la ligne apres le lien En savoir plus
var ret = document.createElement("br");
document.getElementById("mylink").appendChild(ret);

var title = document.createElement("h4");
var txt_node = document.createTextNode("Titre");
title.appendChild(txt_node);
document.getElementById("mylink").appendChild(txt_node);

......
var alink = document.createElement("a");
txt_node = document.createTextNode("En savoir plus");
alink.appendChild(txt_node);
alink.href = "mon_lien";
document.getElementById("mylink").appendChild(alink);
}

Dans le <body>, j'ai intégré le lien comme suit:
<div id="mylink" style="width:500px; height:500px;">
<a href="#" onclick="javascript:AFFICHE();">Bonjour</a>
</div>
Ça m'a affiché le texte dans la div "mylink". J'espère que ça peut vous aider. Smiley cligne
Bonjour,

Merci pour vos réponses QuentinC et inwebunivers.

inwebunivers, j'ai essayé ta solution, et elle fonctionne !
Je pense partir de cette base !
Seulement, j'aurais une petite question supplémentaire :

Lorsque je clique d'image en image, le texte apparu suite au clique sur la première image ne s'efface pas lorsque je clique sur la seconde image pour laisser place au texte qui devrait s'afficher quand je clique sur la seconde image, ce qui donne une suite de texte les un en dessous des autres.

Exemple :
<div class="choose">
<a href="#" onclick="javascript:AFFICHE1();"><img id="img1" src="image1.jpg" alt="image1" width="67" height="67" /></a><span>image1</span>
</div>
<div class="choose">
<a href="#" onclick="javascript:AFFICHE2();"><img id="imgi20" src="image2.jpg" alt="image2" width="67" height="67" /></a><span>image2</span>
</div>

J'ai une image1 avec un onclick AFFICHE1 et une image 2 avec un onclick AFFICHE2 en fonction et j'ai donc les fonctions qui s'ajoutent les une en dessous des autres dans le div texte qui les reçoit.

Je suppose qu'il faut ajouter une commande demandant à la fonction de "remove" le texte afficher avant et ensuite d'afficher le texte des fonctions AFFICHE1 , 2 , 3 etc !!

Mais je ne sais pas quel est la syntaxe de cette commande.

Sachant que je suis toujours sur le code de la fonction AFFICHE proposé par inwebunivers.

Merci d'avance pour vos réponses.
Bonjour kenzo,
- Je vous propose d'ajouter ces fonctions dans le bloc script:

//Ici je récupère l'Id de la <div class="choose"> sélectionnée
//Il faut tester la fonction "getElementsByClassName" avec IE, peut être elle ne fonctionne pas avec quelques versions antérieures.
function getDivId(mydiv){
var divs = document.getElementsByClassName("choose");
if(divs.length>0){
for(var j=0; j<divs.length; j++){
if(divs[j] === mydiv)
return j;
}
}

//Cette fonction supprime le bloc ajouté par la fonction AFFICHE()
function clear_elements(id){
var divs = document.getElementsByClassName("choose");
for(var i=0; i<divs.length; i++){
//Exceptée la div sélectionnée
if( i != id){
var list = divs.item(i).children;
for(var j=list.length-1; j>2; j--) //j>2 pour ne pas supprimer les éléments img et span
{
divs.item(i).removeChild(list[j]);
}
}
}
}


//Au click sur une div "choose", on va appeler cette fonction
function show_hide_div(myDiv){
clear_elements(getDivId(myDiv));
AFFICHE(myDiv);
}


-Je n'ai pas changé le corps de la fonction AFFICHE. Concernant le bloc html:
<div class="choose" onclick="javascript:show_hide_div(this);"><img id="img1" src="image1.jpg" alt="image1" width="67" height="67" />
<br><span>image1</span>
</div>

-J'ai quelques remarques à vous transmettre:
-J'ai substitué la balise <a class="choose"> par une <div>: parce que je vois qu'elle n'a pas d'utilité (href="#"), peut être vous en aurez besoin dans un autre contexte.
-Je pense qu'il faudrait mieux factoriser la fonction AFFICHE() au lieu de répéter son comportement avec AFFICHE1 , 2 , 3, ...
-Et il reste à résoudre le problème de double click sur la meme div. A chaque fois qu'on click la meme div, le code répète le bloc de la fonction AFFICHE.

Cordialement.
Merci !
Mais myDiv, ça correspond à quoi ?
Faut-il le changer par le nom de la div où se place le texte qu'on va nommer div id="montexte"

En effet, il reste à résoudre le problème de double click sur la meme div !
Je ne sais comment faire.