Clic de lien

toto -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un souci avec mon menu de site web. J'aurais voulu qu lorsque je clic sur un lien de mon menu, celui-ci change de couleur et garde cette couleur jusqu'a ce que je clic sur un autre element du menu. pouvez vous m'aider s'il vous plait

22 réponses

sasha35 Messages postés 73 Statut Membre 11
 
Mon html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Site de sasha</title>
<script src="cliclien.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
<div >
<a id="lien" class="normal" href="#" target="gauche" value="societe" name="hello">Hello</a> </li>

<a id="lien" class="normal" href="#" target="gauche" value="nada" name="salut">Salut</a> </li>

<a id="lien" class="normal" href="#" target="gauche" value="yahou" name="bjr">Bjr</a> </li>

</div>

</body>
</html>

Mon js:
window.onload = init ;
function init()
{
document.getElementById('lien'). /*<-ne pas laisse d'espace dans document.getElementById*/
addEventListener('click', changerClasse, true);
}
function changerClasse()
{
/*var lesliens = document.getElementsById('lien');
for(var i=0;i<lesliens.length;i++)
{
alert("bouclefor");
lesliens[i].setAttribute('class','normale');
}*/
this.setAttribute('class','selected');
}
C'est pas complet car en cliquant sur un lien mon code modifie la classe du lien mais ouvre aussi un nouvelle onglet sur lequel le lien na pas sa classe de changer .
2
toto
 
merci. j'essaye de mettre en place ce bout de code avec une feuille css pour changer les liens mais lorsque je clic sur un lien, il ne change pas de couleur

voici le CSS:

a.selected{
text-decoration : underline;
color:green;
}

a.normal{
text-decoration : none;
color:yellow;
}
0
toto
 
ça fonctionne chez toi?
0
toto
 
Je veux en faite faire comme le menu de Comment ça marche (Accueil, forum astuces ....). lorsqu'on est dans un onglet, celui-ci change de couleur et lorsquon clic un autre onglet, le précédent revient a sa valeur initiale
1
sasha35 Messages postés 73 Statut Membre 11
 
Tien à mettre dans le css, je ne savais pas que ça existait:

Voici l'explication fournie avec le bout de code:
"Finalement, la classe suivante est utilisée pour mettre en valeur l’élément de menu de la page actuellement affichée :"

Et le code:
.menu li#current a {
color: #B22819; /* Couleur de texte */?
}

J'ai pas eu le temps de l'essayer, mais je voit ça de mon coté.
1
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

tu peux peut être le coder en dur dans le HTML :
 <a onclick="changerClasse();" id="lien" class="normal" href="#" target="gauche" value="societe" name="hello">Hello</a>

ou alors mieux vaut utiliser les classes en bouclant sur tous les liens du document :
window.onload = init ;
var links = array();
function init()
{
	var all_links = document.getElementsByTagName('a');
	for(link in all_links)
	{
		if(link.getAttribute('class') == 'menu_js')
		{
			link.addEventListener('click', changerClasse, true);
			links[] = link;
		}
	}
}

function changerClasse()
{
	for(link in links)
	{
		link.setAttribute('class','menu_js');
	}
	this.setAttribute('class','menu_js_selected');
}

et dans ton HTML tu définis la classe des liens à traiter avec "menu_js".

en CSS il faudra coder :
a.menu_js{}
a.menu_js_selected{}

ça reste à tester, si tu ne l'as pas encore, installe FireBug, il te montrera les erreurs de JS.
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toto
 
Personne ne veut m'aider?? S'il vous plait. je cherche depuis longtemps sur les forum et je trouve que des questions qui restent sans réponse. Est-il possible de le faire en PHP ou en javascript??? HELP
0
arsenal_fc Messages postés 165 Statut Membre 9
 
salut toto
-si tu veux que la couleur change au passage de la souris tu dois utiliser a:hover
-si tu veux que la couleur change au moment du clic tu dois utiliser a:active
-si tu veux que la couleur change lorsque le lien est sélectionné a:focus
0
toto
 
oui mais il faut a chaque fois rafraichir la page. sinon le lien reste clické tout le temps meme si je change d'onglet.
commen tfaire pour que lorsque je clique sur un autre lien, le precedent revienne a sa couleur initiale?
0
toto
 
personne ne veut m'aider?
0
toto
 
HELP ME
0
sasha35 Messages postés 73 Statut Membre 11
 
voila comment le site comment ca mache le fait:
ils renvoie l'information du clic sur un lien à une page php comme ça et la page change les classes des liens en rien du tout et ensuite celle du lien cliquer en selected:
<form id="search" action="http://www.commentcamarche.net/search/search.php3" method="get" name="search">

puis dans le code css ils disse que si un lien est selected faire ce qui est entre guillemet:
a.selected {ccm.css?...903051645 (ligne 1905)
background-image:url(http://static.commentcamarche.net/www.commentcamarche.net/sprites/sprite_vert3.png);
}

ce qui donne dans le html ca:(note que tu ne doit pas mettre class="selected" ici c le php qui le fera)
<ul id="menuList1">
<li>
<a href="/">Accueil</a>
</li>
<li>
<a class="selected" href="/forum/">Forum</a>
</li>

voila c'est un peu brouillon.
0
toto
 
merci beaucoup de ton aide. enfin quelqu'un qui m'aide. je vais essayer ça. merci beaucoup a toi
0
toto
 
Je fait comment dans ma page PHP?

if($id=="accueil"){ //ça c'est le lien que je vien de cliquer
class=="selected"
}

J'ai ça dans mon html:

<ul id="menu_horizontal">
<li class="menu"><a href="accueil.php"> <img border="0" src="images/titres_accueil/accueil.gif"> </a></li>

je ne vois pas comment je peux modifier la class en selected
0
sasha35 Messages postés 73 Statut Membre 11
 
voila en cherchant pour autre chose je suis tomber sur un ancien cour:
dans ton html:

<script src="comport.js" (plus la suite)
<div id="lien">
<a href="hello.html">Hello</a>

</div>

dans ta page javascript:
window.onload = init ;
function init()
{
document.getElementBy Id('lien').
addEventListener('click', changerClasse, true);
}
function changerClasse()
{
(la il faudrait mettre la même ligne que celle du dessous pour dire que tout les liens prennent la classe->normal ou un autre nom que tu reutilisera dans ton css
this.setAttribute('class','selected');
}
0
sasha35 Messages postés 73 Statut Membre 11
 
Je croit qu'en mettant cette ligne a la place de "la il faudrait mettre la même ligne que celle du dessous pour dire que tout les liens prennent la classe->normal ou un autre nom que tu réutilisera dans ton css" dans mon mess précédant ça devrait marcher.
document.getElementById('lien').setAttribute('class','normal');
0
toto
 
j'ai fait ça mais ça ne marche pas:

<script language="javascript">
window.onload = init ;
function init()
{
document.getElementBy Id('lien').
addEventListener('click', changerClasse, true);
}
function changerClasse()
{
document.getElementById('lien').setAttribute('class','menu');
this.setAttribute('class','selected');
}
</script>
<div id="lien">
<li class="menu"><a href="frame1.php?id=societe" target="gauche" value="societe" name="menu">Hello</a> </li>

</div>
0
arthezius Messages postés 3756 Statut Membre 475
 
Je suppose que tu veux quelques chose comme ça: http://arthezius.fr/accueil.php?page=creat
Pour le faire je me sert du fait que le contenu de ma page est défini par la variable dans l'url ?page=
Du coup il me suffit de faire une simple condition en PHP.
if($_GET['page'] == 'page1'){echo'<p class="actif"><a href="index.php?page=page1"Onglet 1</p>';}
else{echo'<p class="inactif"><a href="index.php?page=page1"Onglet 1</p>';}
if($_GET['page'] == 'page2'){echo'<p class="actif"><a href="index.php?page=page2"Onglet 2</p>';}
else{echo'<p class="inactif"><a href="index.php?page=page2"Onglet 2</p>';}

Voici un exemple simple.
J'espère que ça pourra t'aider.
0
toto > arthezius Messages postés 3756 Statut Membre
 
j'ai effectivement 2 frames comme toi. un menu a gauche et ma page au centre
Mais en faite j'ai aussi un menu en haut. quand je clic sur un lien en haut, un sous menu s'affiche a gauche et je voudrai que le lien en haut reste different des autres pour montrer que je suis bien dans ce menu.

mon clic en haut modifie ma frame de gauche
mon clic a gauche modifie ma page du milj'ai du mal a interpréter vos methodes et a les utiliser.
0
arthezius Messages postés 3756 Statut Membre 475 > toto
 
Pour le sous menu tu doit pouvoir le faire de la même façon avec une condition.
Avec un
if($_GET['page'] == 'variable')
{echo'';}

Tu peux afficher ce que tu veux n'importe où suivant la page où tu es. Celle-ci étant défini par la variable dans l'url tu peux très bien adapté ça au sous-menu.
0
sasha35 Messages postés 73 Statut Membre 11
 
pour appeler la page javascript a tu fait qqchose comme ça?
<script src="comportement1.js" type="text/javascript"></script>

Sinon dans ta page de javascript je croit que tu n'a pas besoin de:
<script language="javascript">
mais pour ça je suis pas sur.
0
toto
 
oui j'ai bien fait comme ça

j'ai mis ça dans le code html :

<script src="comport.js" type="text/javascript"></script>

<div id="lien">
<a href="frame1.php?id=societe" target="gauche" value="societe" name="menu">Hello</a> </li>

</div>



et ça dans le javascript :

window.onload = init ;
function init()
{
document.getElementBy Id('lien').
addEventListener('click', changerClasse, true);
}
function changerClasse()
{
document.getElementById('lien').setAttribute('class','menu');
this.setAttribute('class','selected');
}


mais il ne passe jamais a "selected"
0
sasha35 Messages postés 73 Statut Membre 11
 
je vais essayer de mon coter mais je ne pourrait te répondre que demain.
0
toto
 
merci beaucoup. c'est très gentil de prendre du temps pour m'aider
0
Utilisateur anonyme
 
arthezius, revois tes scripts d'inscription, je veux jouer à space attack ;)
0
arthezius Messages postés 3756 Statut Membre 475
 
lol

Hors-sujet. De plus c'est un projet qui est loin d'être abouti. Donc pas encore au point.
0
Utilisateur anonyme
 
Ne jamais mettre en ligne un prjet non abouti (règle n°1?)
0
arthezius Messages postés 3756 Statut Membre 475
 
En même temps je l'ai masqué pour le référencement donc à ce niveau là pas de souci.
0
toto > arthezius Messages postés 3756 Statut Membre
 
ce n'est pas le sujet de cette discussion
0
toto
 
Je pense qu'on en est pas loin. le javascript a l'air d'etre bon. c'est ce que je veux, lorsqu'on clic sur un lien, tous les liens se mettent en normal et le lien cliqué se met en selectde. donc c'est bien ça mais bizarement, je ne vois aucun effet, on dirais que les liens n'arrivent pas a se mettre en selected.
0
sasha35 Messages postés 73 Statut Membre 11
 
Voila ce qui se passe chez moi je double clic sue le fichier cliclien.html ce qui ouvre une page firefox qui comprend trois lien en jaune si je clique sur le premier lien (j'ai fait l'erreur de mettre le même id à chaque lien donc ça ne fonctionne pas pour les autre) cela m'ouvre un autre onglet avec les trois lien en jaune et class=normal mais si je revient sur l'onglet précédent le premier lien est en vert et class=selected
0
toto
 
comment peut-on faire pour que cela fonctionne avec tous les liens?
car si je donne un ID different a chaque lien, cela ne fonctionne plus puisque dans le javascript, la fonction n'est définie que lorsque l'ID='lien' donc cela fonctionne que si le nom de l'ID=lien.

Par ailleurs merci pour ta reponse
0
sasha35 Messages postés 73 Statut Membre 11
 
je suis en train de voir pour integrer une boucle for qui passe par tout les nom de lien si bien sur on les nomme lien1, lien2 , etc
Mon code actuel(qui ne fontionne pas):
window.onload = init ;
function init()
{
alert("init");
var getelem='';
var getelems = array();

while(getelem!='')
{ alert("while");

for(var i=0;i<100;i++)
{
alert("for");
var getelem = document.getElementsById('lien.[i]');
getelems[]=getelem;
//lesliens[i].setAttribute('class','normale');
}
}
//document.getElementById('lien').
alert("eventlistener");
addEventListener('click', changerClasse, true);

}
function changerClasse()
{
/*var lesliens = document.getElementsById('lien');
for(var i=0;i<lesliens.length;i++)
{
alert("bouclefor");
lesliens[i].setAttribute('class','normale');
}*/
this.setAttribute('class','selected');
}
0