Réduction d'un code Javascript trop long...

Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -  
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   - 20 févr. 2010 à 23:56
Bonjour,

Étant novice en JavaScript j'ai codé 6 fonctions. 3 d'entre elles exécutent le même code mais pour des blocs d'identifiants différents.

J'aimerai compacter ce code en deux fonctions cacher / révéler. Afin de ne pas avoir ce code-ci:

function cacher()
{
document.getElementById('promo_infos_here').style.display = 'none';
}
function reveler()
{
document.getElementById('promo_infos_here').style.display = 'block';
}
function cacherdeux()
{
document.getElementById('promo_infos_here_deux').style.display = 'none';
}
function revelerdeux()
{
document.getElementById('promo_infos_here_deux').style.display = 'block';
}
function cachertrois()
{
document.getElementById('promo_infos_here_trois').style.display = 'none';
}
function revelertrois()
{
document.getElementById('promo_infos_here_trois').style.display = 'block';
}


Pouvez-vous m'aider ou m'aiguiller vers une solution ?

Merci d'avance ;)
A voir également:

18 réponses

avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
function cacher(nb = '') {
	document.getElementById('promo_infos_here' + nb).style.display = 'none'; 
} 
function reveler(nb = '') {
	document.getElementById('promo_infos_here' + nb).style.display = 'block'; 
}
Et quand tu appelles une fonction, il suffit de préciser ce qu'il y a après "promo_infos_here" :
cacher('_deux');
1
LelLex Messages postés 1628 Date d'inscription   Statut Membre Dernière intervention   112
 
Tu as essayé(e) d'utiliser une librairie JavaScript : MoonTools - jQuery.
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Non non. Je souhaite seulement simplifier le code...
0
LelLex Messages postés 1628 Date d'inscription   Statut Membre Dernière intervention   112
 
Tu appelles tes blocs par le même nom.
Et dans ton code JS tu mets le nom de tes div.

?!
0

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

Posez votre question
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Non car je veux qu'un seul bloc aparaisse/disparaisse à la fois. Je dois donner un nom différent à chaque bloc mais je peux leur donner une même classe si besoin est.
Je ne sais pas comment procéder avec JS
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci acion-f16, c'est exactement ce dont j'avais besoin.

Un grand merci ;)
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
En fait...je n'ai pas bien saisi:

Dans mon html j'ai par exemple:

<span class="promo_infos_deux" onmouseover="cacher('_deux')" onmouseout="reveler('_deux')">
<span id="promo_infos_here_deux">
titre du contenu a cacher
</span>
<span class="promo_infos_detail_deux">
contenu à révéler..
</span>
</span>

C'est ainsi que je dois appeler les fonctions dans le HTML ? Et dans le JS que tu m'as donné, dois-je modifier quelque chose ?

Merci d'avance
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
<span class="promo_infos_deux" onmouseover="cacher('_deux')" onmouseout="reveler('_deux')">texte</span>
<span id="promo_infos_detail_deux">
    contenu à révéler.. 
</span>
Attentionx aux différences entre "id" et "class"
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Et je laisse le JS tel quel ?

Oui je sais bien pour les class et les ID t'inquiète pas ;)
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
Oui, le JS est bon.
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai essayé avec ceci pour le JS :

function cacher(nb = '') {
document.getElementById('promo_infos_here' + nb).style.display = 'none';
}
function reveler(nb = '') {
document.getElementById('promo_infos_here' + nb).style.display = 'block';
}

Et ceci pour le HTML:

<span class="promo_infos_deux" onmouseover="cacher('_deux')" onmouseout="reveler('_deux')">texte</span>
<span id="promo_infos_detail_deux">
contenu à révéler..
</span>

Le contenu qui est ici "texte" dans le HTML ne disparaît pas au survol.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
C'est "promo_infos_here_deux" et pas "promo_infos_detail_deux".
Donc modifies le JS ou le (x)HTML.
Et le contenu à masquer/afficher ce n'est pas plutôt "contenu à révéler.." ? Je ne comprends pas ce que t'essaye de faire.
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Ceci est affiché par un hover :
<span id="promo_infos_detail_deux">
contenu à révéler..
</span>

Pas besoin de JS...mais...
le contenu à cacher/montrer par JS est celui dans:
<span class="promo_infos_deux" onmouseover="cacher('_deux')" onmouseout="reveler('_deux')">texte</span>
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
En fait tu veux simplement un système de afficher/masquer avec des lignes et quand on clique sur une, un texte s'affiche en-dessous ?
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Oui, une ligne s'affiche à la base. Au survol, elle disparaît pour laisser apparaître un second texte. Elle réapparait quand la zone n'est plus survolée.

Le texte de base doit etre caché/afficher en JS, le second texte apparaît simplement avec un système de hover :)
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
Comme ça ? http://paste.pocoo.org/show/180477/
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Non pas exactement.

Voici l'état de base d'affichage sur le site :
- texte d'accroche visible
- texte descriptif invisible

La personne survole le texte d'accroche et:
- texte d'accroche disparaît grâce au Js
- texte descriptif apparaît grâce au :hover dans le css

La personne retire la souris:
- texte d'accroche ré-apparaît grâce au Js
- texte descriptif à nouveau invisible grâce au :hover dans le css

Voilà ;)
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 505
 
Et bien ? Ce n'est pas ce que fait mon script ?
Par contre ce n'est pas faisable en CSS avec :hover
0
Id=ntity Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   1
 
Je te montre la page par message privé, tu comprendras mieux ^^
0