D'autre part en tant qu'utilisateur je trouve qu'une option "toutes les catégories" pour voir toutes les catégories

Ah oui tu as raisonSB a écrit :Je rajouterais que tu devrais modifier le script de ChBok comme je l'ai dit car à l'heure actuelle une fois le display:none appliquée il reste en l'état même si tu changes de choix donc tu finis part ne plus voir de liens du tout.
Ah oui tu as raisonSB a écrit :D'autre part en tant qu'utilisateur je trouve qu'une option "toutes les catégories" pour voir toutes les catégoriesserait pas mal.
Excellente questionBenoit a écrit :Pourquoi avoir abandonné mon idée de ne chercher que parmi les éléments de la liste (liste.getElementsByTagName()) et parcourir tout le document ?
Code : Tout sélectionner
function CacheSauf(classe) {
var liste = document.getElementById("liste"); //on ne recherche que dans <foo id="liste">
var elts = liste.getElementsByTagName('li'); //on ne recherche que dans les éléments <li>
for(var i=0; i<elts.length; i++) {
var mycls = elts[i].getAttribute('class');
if (mycls!=null && mycls.indexOf(classe)<0)
{elts[i].setAttribute('style', 'display:none');}
else {elts[i].setAttribute('style', 'display:block');}
}
}
J'avais trouvé ça ici : http://www.mozilla.org/docs/dom/domref/ ... ml#1027595 ça avait l'air d'être ce que tu voulais, bizarre que ça ne fonctionne pas.calimo a écrit :Par contre j'ai un avertissement : reference to undefined property e.className![]()
Et il ne se passe rien
Code : Tout sélectionner
function CacheSauf(classe) {
var liste = document.getElementById("liste"); //on ne recherche que dans <foo id="liste">
var elts = liste.getElementsByTagName('li'); //on ne recherche que dans les éléments <li>
if (classe=="toutes") {
for(var i=0; i<elts.length; i++) {
var mycls = elts[i].setAttribute('style', 'display:list-item');
}
}
else {
for(var i=0; i<elts.length; i++) {
var mycls = elts[i].getAttribute('class');
if (mycls!=null && mycls.indexOf(classe)<0)
{elts[i].setAttribute('style', 'display:none');}
else {elts[i].setAttribute('style', 'display:list-item');}
}
}
}
elts.style.display = 'none';Bobe a écrit :ça vient de la façon de renseigner l'attribut style. Le faire avec setAttribute() ne fonctionne pas dans certains navigateurs (idem pour les attributs HTML d'évènements).
Oui enfin bon chaque chose en son tempsBobe a écrit :Moi, ce que je comprend mal, c'est la présence de ce formulaire alors qu'il n'y a aucun envoie de données vers un script coté serveur.
Il faudrait dans l'idéal générer la partie label + select + bouton en javascript plutôt que les mettre en dur dans le document.
Je t'ai fait un petit quelque chose comme exemple:
http://dev.webnaute.net/BAS/extensions
Il est marqué que ça existe depuis JavaScript 1.0 mais c'est peut-être une erreur, ou alors ça ne s'applique pas aux tableaux ?calimo a écrit :Re-edit : ça ne marche ni sous IE ni sous Opera
Je ne sais pasBenoit a écrit :Il est marqué que ça existe depuis JavaScript 1.0 mais c'est peut-être une erreur, ou alors ça ne s'applique pas aux tableaux ?calimo a écrit :Re-edit : ça ne marche ni sous IE ni sous Opera
http://web.archive.org/web/200312091255 ... ml#1004815
J'ai pensé que c'était comme le foreach() en PHP mais me suis peut-être planté alors.
Dans tous les cas il n'y a pas intérêt à naviguer au clavierBenoit a écrit :Edit: Dans le script de Bobe je trouve que l'évènement devrait être mis sur le "onchange" de la liste et pas sur le "onclick" du bouton.
Oui à la première question. Mais il est préférable de lancer les scripts de remplissage de listes ou de création de balises <DIV> à partir d'un évènement onload sur la balise <BODY>. Ainsi, la page se charge d'abord et est ensuite modifiée dynamiquement ; le DOM ayant reçu tous les objets.calimo a écrit :Autres choses :
- Est-il possible de mettre ce script dans le <body> pour ne l'insérer que dans quelques pages (3)...
- Je ne comprend pas vraiment comment il s'insère... c'est un div (var choixcat = document.createElement('div');) et il y a visiblement une ligne à la fin : document.body.insertBefore(choixcat, document.getElementsByTagName('div')[0]);
Oui, c'est pour l'accessibilité pour que j'ai préféré le bouton + 'click' plutôt que l'évènement 'change' sur la liste. Il faudrait ajouter un évènement 'keypress' et récupérer le code de la touche pressée avec keyCode.calimo a écrit :Dans tous les cas il n'y a pas intérêt à naviguer au clavierBenoit a écrit :Edit: Dans le script de Bobe je trouve que l'évènement devrait être mis sur le "onchange" de la liste et pas sur le "onclick" du bouton.![]()
D'où mon idée originale d'un formulaire avec son "onsubmit" qui n'a pas été inventé pour rien![]()
Met-le dans un fichier externe non ?Autres choses : Est-il possible de mettre ce script dans le <body> pour ne l'insérer que dans quelques pages (3)...![]()
Comme l'a dit chBok, le bloc créé est inséré avant le premier DIV de la page. C'était un choix arbitraire, à toi de faire l'insertion où tu veux.Je ne comprend pas vraiment comment il s'insère... c'est un div (var choixcat = document.createElement('div');) et il y a visiblement une ligne à la fin : document.body.insertBefore(choixcat, document.getElementsByTagName('div')[0]);
Code : Tout sélectionner
<div id="choix-categorie">
<label for="cat">Catégorie à afficher :</label>
<select id="cat">
<option value="toutes">toutes</option>
<option value="..">.. etc
</select>
<input type="button" value="valider"/>
</div>
Et comment on peut gérer ça ? Un simple buttonElt.onkeydown = displayCat; ? ça a l'air de marcher...Bobe a écrit :Oui, c'est pour l'accessibilité pour que j'ai préféré le bouton + 'click' plutôt que l'évènement 'change' sur la liste. Il faudrait ajouter un évènement 'keypress' et récupérer le code de la touche pressée avec keyCode.
L'évènement DOMActivate résoudrait le problème mais n'est pas cross-browser actuellement. En fait, je ne sais même pas si Mozilla le gère.
Oui bien sur mais l'insertion ce serait bien qu'elle soit dans le bodyBobe a écrit :Met-le dans un fichier externe non ?Autres choses : Est-il possible de mettre ce script dans le <body> pour ne l'insérer que dans quelques pages (3)...![]()
Bahcalimo a écrit :Oui bien sur mais l'insertion ce serait bien qu'elle soit dans le bodyBobe a écrit : Met-le dans un fichier externe non ?
Avec le Wiki c'est soit on la mets dans toutes les pages, soit dans le body... ou alors c'est très compliqué !
En théorie c'est possible ? Dans la pratique ça semble marcher...
Code : Tout sélectionner
<body>
.. etc...
<script type="text/javascript" src="tonfichier.js"></script>
.. etc...
</body>
</html>
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité