Petite aide facile javascript

Résolu/Fermé
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009 - 30 sept. 2008 à 18:55
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009 - 19 nov. 2008 à 19:32
Bonjour,

jaimerai savoir comment ecrire une foction qui fait le suivant:

lors d'un clic sur nimporte quel balise <a> le class de la balise body change.
es ce possible??

merci

30 réponses

Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
13 oct. 2008 à 19:15
groarh ca ne marche pas :_-(

sait tu peut etre quel peut etre le probleme???? l"erreur c'est ca:
SyntaxError: Parse Error (line25)

ligne 25 c'est a dire: var collection1 = ....

merci beacoup
-1
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
14 oct. 2008 à 10:35
:· sais pas... faute de frappe ?
Ou alors ton navigateur ne prend pas en charge un niveau suffisant de DOM (je crois qu'il faut le niveau 2).
Essaye ce test dans ta console de débuggage :
document.implementation.hasFeature('Core', '2.0')
-1
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
14 oct. 2008 à 18:46
enfait le code etait mal encodé et avait des caracteres cachées. Voici mon code propre:
function slide()
{
function addListener(o, e, f)
{
if (o.addEventListener)
{
o.addEventListener(e, f, false);
}
else
{
o.attachEvent("on" + e, f);
}
}
function changeClass1()
{
document.getElementById("content").className = "slidedone";
document.getElementById("footer").className = "slidedone";
document.getElementById("list").className = "slidedone";
}
function changeClass2()
{
document.getElementById("content").className = "slidedone2";
document.getElementById("footer").className = "slidedone2";
document.getElementById("list").className = "slidedone2";
}
function bindAnchors()
{
var collection1 = document.getElementById("topmenu").getElementsByTagName("a");
var collection2 = document.getElementById("content").getElementsByTagName("a");
var collection3 = document.getElementById("toprightmenu").getElementsByTagName("a");
var collection4 = document.getElementById("toprightbutton").getElementsByTagName("a");
for (i = 0; i <= collection1.length - 1; ++i)
{
var lien = collection1.item(i);
addListener(lien, "click", changeClass2);
}
for (i = 0; i <= collection2.length - 1; ++i)
{
var lien = collection2.item(i);
addListener(lien, "click", changeClass1);
}
for (i = 0; i <= collection3.length - 1; ++i)
{
var lien = collection3.item(i);
addListener(lien, "click", changeClass1);
}
for (i = 0; i <= collection4.length - 1; ++i)
{
var lien = collection4.item(i);
addListener(lien, "click", changeClass1);
}
}
addListener(window, "load", bindAnchors);


Il y a encore une erreur mais cette fois ca viens d'une balise non terminée. Il manque un }
Je ne sais pas ou le placer :p. Il donne lerreur sur la dernierre ligne c-a-d: addlistener(window...

Merci pour tout ton aide.
-1
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
15 oct. 2008 à 14:40
Fais des indentations, tu y verras beaucoup plus clair :
function slide() {
	function addListener(o, e, f) {
		if (o.addEventListener) {
			o.addEventListener(e, f, false);
		} else {
			o.attachEvent("on" + e, f);
		}
	}
	function changeClass1() {
		document.getElementById("content").className = "slidedone";
		document.getElementById("footer").className = "slidedone";
		document.getElementById("list").className = "slidedone";
	}
	function changeClass2() {
		document.getElementById("content").className = "slidedone2";
		document.getElementById("footer").className = "slidedone2";
		document.getElementById("list").className = "slidedone2";
	}
	function bindAnchors() {
		var collection1 = document.getElementById("topmenu").getElementsByTagName("a");
		var collection2 = document.getElementById("content").getElementsByTagName("a");
		var collection3 = document.getElementById("toprightmenu").getElementsByTagName("a");
		var collection4 = document.getElementById("toprightbutton").getElementsByTagName("a");
		for (i = 0; i <= collection1.length - 1; ++i) {
			var lien = collection1.item(i);
			addListener(lien, "click", changeClass2);
		}
		for (i = 0; i <= collection2.length - 1; ++i) {
			var lien = collection2.item(i);
			addListener(lien, "click", changeClass1);
		}
		for (i = 0; i <= collection3.length - 1; ++i) {
			var lien = collection3.item(i);
			addListener(lien, "click", changeClass1);
		}
		for (i = 0; i <= collection4.length - 1; ++i) {
			var lien = collection4.item(i);
			addListener(lien, "click", changeClass1);
		}
	}
	addListener(window, "load", bindAnchors);
}

Mais si tu laisses ça comme c'est, au chargement de la page, le navigateur va voir ça comme ça :
" Il y a une fonction slide, elle est déclarée, bon ok très bien, y'a des trucs à l'intérieur mais je regardrai quand on me demandera de l'utiliser. "
Donc le addListener qui est dedans, qui est censé s'exécuter au chargement de la page, il passe à la trappe !

Est-ce vraiment nécessaire d'encapsuler tout ce code dans une fonction slide ?
-1

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

Posez votre question
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
15 oct. 2008 à 20:37
ok les gars ca marche!!!!!!!!!!!!!!!!

mais que si j'enleve les tags du script qui ne sont pas presents sur la page... comme:
var collection4 = document.getElementById("toprightbutton").getElementsByTagName("a");


Y a til un moyen de dire au navigateur dignorer ces tag s'ils n'existent pas??

merci :)
-1
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
16 oct. 2008 à 11:51
Heuh, y'a tout un tas de manières :P

Par exemple, tu peux les retirer "en dur" de ton code quand tu les retires de ta page, en virant tous les bouts de code qui utilisent collection4 ;

Tu peux, pour faire plus "secret", intercepter les erreurs en plaçant le code traitant les liens susceptibles de disparaître dans un bloc try/catch avec le catch vide :
try {
  var collection4 = document.getElementById("toprightbutton").getElementsByTagName("a");
  for (i = 0; i <= collection4.length - 1; ++i) {
    var lien = collection4.item(i);
    addListener(lien, "click", changeClass1);
  }
} catch(e) { }

Ou alors, faire un test sur collection4 avant la boucle for correspondante,
if (collection4) {
  for (...) {
    ...
  }
}
c'est plus rigoureux ;

etc.
Mais tu peux aussi laisser ça comme c'est : le script génère un avertissement, du style document.getElementById("toprightbutton") has no properties, que les utilisateurs ne voient même pas en général ; puis le script continue. Donc c'est pas très grave.
-1
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
16 oct. 2008 à 15:36
non ca ne marche pas si il y a l'erreur. Je vais tester ton truc catch ;)

merci 1000 fois!
-1
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
16 oct. 2008 à 20:06
ca marche!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

http://m.iwebkit.net

va voir avec safari! c'est l'effet quand tu clique sur un lien. La page se decalle.

Merci10000 fois :)
-1
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
16 oct. 2008 à 20:17
Ok. Repense au truc avec les if, si tu es perfectionniste comme moi, car le try n'est pas la solution la plus rigoureuse : on corrige les erreurs au lieu de les prévenir...

;)
-1
Winterboard Messages postés 137 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 30 juin 2009
16 oct. 2008 à 20:36
pourrais tu me l'ecrire car je ne voit pas ce que tu veut dire :p
-1