Petite aide facile javascript

Résolu
Winterboard Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   -  
Winterboard Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

30 réponses

Winterboard Messages postés 137 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   185
 
:· 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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention  
 
pourrais tu me l'ecrire car je ne voit pas ce que tu veut dire :p
-1