begin process at 2012 05 28 13:50:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Menu & Co

 > MENU SELECT MULTINIVEAUX

MENU SELECT MULTINIVEAUX


 Information sur la source

Note :
Aucune note
Catégorie :Menu & Co Niveau :Débutant Date de création :10/03/2005 Date de mise à jour :07/12/2005 12:43:57 Vu / téléchargé :11 073 / 1 024

Auteur : chimelpremier

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Construisez une liste à puce accessible à tous et aux moteurs de reccherche.

Le script fait le reste

Source

  • <!--// Michel Deboom mars 2005 menu select accessible multiniveaux
  • D=document;
  • sel=[]; //tableau des éléments select
  • opt=[]; //tableau des éléments option
  • dtd=D.compatMode=="CSS1Compat"?1:0;
  • function initMenu()
  • {
  • ancre=D.getElementById('ancre_menu') // élément contenant le nouveau menu
  • menu1=D.getElementById('menu'); // ancien menu
  • menu1.style.display='none'// cache le menu d'origine
  • new_menu=D.createElement('form'); //création du nouveau menu
  • new_menu.className="new_menu"
  • ancre.appendChild(new_menu); // collé dans ancre
  • sousMenu=menu1.parentNode.getElementsByTagName('ul'); //tableau des sous-menus
  • max=menu1.getElementsByTagName('ul').length // nb de sous-menus - 1
  • for(j=max;j>=0;j--)
  • {
  • sel[j]=D.createElement('select');
  • new_menu.appendChild(sel[j]); //ajoute un élément select
  • if(window.Event)sel[j].onmouseup=function(){af(this)}; // évènement ajouté gecko Opéra
  • else sel[j].onclick=function(){af(this)} //ie
  • sousMenu[j].id=sel[j].id="sel"+j; // id ajoutée
  • lis=sousMenu[j].getElementsByTagName('li'); // tableau des li par sous-menu
  • for(var i=0;i<lis.length;i++)
  • {var L=lis[i];
  • if(L.className!="vu") // pour lire une seule fois chaque li
  • {
  • opt[i]=D.createElement('option');
  • L.className="vu";
  • sel[j].appendChild(opt[i]); // élément option ajouté
  • if(L.firstChild.tagName=="A") // contient un lien
  • {
  • opt[i].value=L.firstChild.href //transforme le lien
  • opt[i].innerHTML=L.firstChild.innerHTML;// ajoute le contenu du li
  • opt[i].className="lien" // dans la feuille de style
  • }
  • else
  • {
  • opt[i].innerHTML=L.firstChild.data
  • opt[i].className="rub" // dans la feuille de style
  • opt[i].value='#' //lien inactif
  • smenu=L.getElementsByTagName('ul')[0]
  • if(smenu)
  • {
  • opt[i].value=smenu.id
  • D.getElementById(smenu.id).style.display='none';
  • D.getElementById(smenu.id).style.position='absolute';
  • }
  • }
  • }
  • }
  • }
  • }
  • function af(obj){
  • if(obj.style.display!='none') //un seul niveau ouvert
  • {
  • for(var i=obj.id.substr(3,2);i<max;i++)D.getElementById('sel'+i).style.display='none';
  • obj.style.display='inline'
  • }
  • if(obj.value.substr(0,3)=='sel') //sous-menu éxistant ?
  • {
  • D.getElementById(obj.value).style.left=obj.offsetWidth+obj.offsetLeft+'px'//positionne le sous-menu
  • D.getElementById(obj.value).style.display='inline'
  • }
  • else location=obj.value
  • }
  • //-->
<!--// Michel Deboom mars 2005 menu select accessible multiniveaux
D=document;
sel=[]; //tableau des éléments select
opt=[]; //tableau des éléments option
dtd=D.compatMode=="CSS1Compat"?1:0;

function initMenu()
{
ancre=D.getElementById('ancre_menu') // élément contenant le nouveau menu
menu1=D.getElementById('menu'); // ancien menu
menu1.style.display='none'// cache le menu d'origine
new_menu=D.createElement('form'); //création du nouveau menu
new_menu.className="new_menu"
ancre.appendChild(new_menu); // collé dans ancre
sousMenu=menu1.parentNode.getElementsByTagName('ul'); //tableau des sous-menus
max=menu1.getElementsByTagName('ul').length // nb de sous-menus - 1
for(j=max;j>=0;j--)
  {
  sel[j]=D.createElement('select');    
  new_menu.appendChild(sel[j]); //ajoute un élément select
  if(window.Event)sel[j].onmouseup=function(){af(this)}; // évènement ajouté gecko Opéra
    else sel[j].onclick=function(){af(this)} //ie
  sousMenu[j].id=sel[j].id="sel"+j; // id ajoutée
  lis=sousMenu[j].getElementsByTagName('li'); // tableau des li par sous-menu
  for(var i=0;i<lis.length;i++)
    {var L=lis[i];
    if(L.className!="vu") // pour lire une seule fois chaque li
      {
      opt[i]=D.createElement('option');
      L.className="vu";    
      sel[j].appendChild(opt[i]); // élément option ajouté
      if(L.firstChild.tagName=="A") // contient un lien
        {
        opt[i].value=L.firstChild.href //transforme le lien
        opt[i].innerHTML=L.firstChild.innerHTML;// ajoute le contenu du li
        opt[i].className="lien" // dans la feuille de style
        }
      else 
        {
        opt[i].innerHTML=L.firstChild.data
        opt[i].className="rub" // dans la feuille de style
        opt[i].value='#' //lien inactif
        smenu=L.getElementsByTagName('ul')[0]
        if(smenu)
          {
          opt[i].value=smenu.id
          D.getElementById(smenu.id).style.display='none';
          D.getElementById(smenu.id).style.position='absolute';
          }          
        }
      }
    }
  }
}

function af(obj){
if(obj.style.display!='none') //un seul niveau ouvert
  {
  for(var i=obj.id.substr(3,2);i<max;i++)D.getElementById('sel'+i).style.display='none';
  obj.style.display='inline'
  }
if(obj.value.substr(0,3)=='sel') //sous-menu éxistant ?
  {
  D.getElementById(obj.value).style.left=obj.offsetWidth+obj.offsetLeft+'px'//positionne le sous-menu
  D.getElementById(obj.value).style.display='inline'
  }
else location=obj.value
}
//-->

 Conclusion

Reste à mettre au point une feuille de style qui marche sur Gecko, Opéra et les autres

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 mars 2005 09:58:13 :
capture écran ajoutée
11 mars 2005 10:07:43 :
capture écran ajoutée
12 mars 2005 01:06:39 :
correction de bugs et commentaires
07 décembre 2005 12:43:58 :
J'ai retiré ACCESSIBLE parce que pas à 100%

 Sources du même auteur

Source avec Zip Source avec une capture ROLLOVER D'IMAGES AUTOMATIQUE
Source avec Zip Source avec une capture MENU EXPANSIF, MULTINIVEAUX
Source avec Zip Source avec une capture QUIZZ AVEC GLISSÉ DÉPOSÉ D'OBJETS COMPATIBLE (DRAG&DROP) .
Source avec Zip MENU MULTIFONCTIONS, ACCESSIBLE
Source avec Zip Source avec une capture MENU DYNAMIQUE MULTINIVEAUX, MULTIFONCTIONS,

 Sources de la même categorie

Source avec Zip Source avec une capture UN MENU EN CSS par Julien39
Source avec Zip FLÈCHE CLIGNOTANTE AU SURVOL D'UN LIEN par lecurieux41
Source avec Zip Source avec une capture TREEMENU-2.3.6-MACNIP par neep
Source avec Zip Source avec une capture MENU CIRCULAIRE par adelmonis
Source avec Zip Source avec une capture MENU TASKBAR WINDOWSXP HOME par micking

Commentaires et avis

Commentaire de loutre74 le 10/03/2005 20:19:32

mmouais ca m a pas convaincu enfin si tu pourrais commenter un peu plus ca serait bien ....

Commentaire de chimelpremier le 11/03/2005 09:50:52

pas convaincu ? pour l'accessibilité ou l'utilité?
Merci d'argumenter loutre74
cordialement

Commentaire de jravouna le 21/11/2006 10:14:17

Super code ! jai modifier la création du select avec un   sel[j].multiple='multiple';
mais a par ca, exellent et très simple d'utilisation. Bravo !

Commentaire de jimmylefou le 17/07/2007 21:05:07

bonjour.
je te remercie de ce code c'est ce que je cherchais :)
seulement, j'aimerais savoir si il est possible sans changer "tout le code" de faire pour qu'a chaque nouvelle liste, un retour a la ligne soit effectué...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales