Bonjour,

j'utilise un code de menu (horizontal à plusieurs niveaux) qui utilise du js ; je vais inclure ce menu dans toutes les pages de mon site ; donc la déclaration du js doit être présente partout ; il me paraît beaucoup plus sain d'exporter ce code dans un fichier js puis d'inclure celui-ci dans les différentes pages# Le code d'nclusion (que je mets dans le head) est :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
<script src="menu.js"></script>
Le code de menu.js est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//<![CDATA[
var timeout = 1000;
for (var i = 0; i < 100; i++) {
  eval("var timeoutli" + i + " = false;");
}
 
function initMenu() {
  if (browser.isDOM1 && !(browser.isMac && browser.isIE) && !(browser.isOpera && browser.versionMajor < 7) && !(browser.isIE && browser.versionMajor < 5)) {
    var menu = document.getElementById('menu');
    var lis = menu.getElementsByTagName('li');
    menu.className = 'menu';
    for (var i = 0; i < lis.length; i++) {
      if (lis.item(i).getElementsByTagName('ul').length > 0) {
        if (browser.isIE) {
          addAnEvent(lis.item(i), 'keyup', show);
        }
        addAnEvent(lis.item(i), 'mouseover', show);
        addAnEvent(lis.item(i), 'mouseout', timeoutHide);
        addAnEvent(lis.item(i), 'blur', timeoutHide);
        addAnEvent(lis.item(i), 'focus', show);
        lis.item(i).setAttribute('id', "li" + i);
      }
    }
  }
}
 
function addAnEvent(target, eventName, functionName) {
  if (browser.isIE) {
    eval('target.on' + eventName + '=functionName');
  } else {
    target.addEventListener(eventName, functionName, true);
  }
}
 
function timeoutHide() {
  eval("timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}
 
function hideUlUnder(id) {
  document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}
 
function show() {
  this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
  var currentNode = this;
  while (currentNode) {
    if (currentNode.nodeName == 'LI') {
      currentNode.getElementsByTagName('a')[0].className = 'linkOver';
    }
    currentNode = currentNode.parentNode;
  }
  eval("clearTimeout( timeout" + this.id + ");");
  hideAllOthersUls(this);
}
 
function hideAllOthersUls(currentLi) {
  var lis = currentLi.parentNode;
  for (var i = 0; i < lis.childNodes.length; i++) {
    if (lis.childNodes[i].nodeName == 'LI' && lis.childNodes[i].id != currentLi.id) {
      hideUlUnderLi(lis.childNodes[i]);
    }
  }
}
 
function hideUlUnderLi(li) {
  var as = li.getElementsByTagName('a');
  for (var i = 0; i < as.length; i++) {
    as.item(i).className = "";
  }
  var uls = li.getElementsByTagName('ul');
  for (var i = 0; i < uls.length; i++) {
    uls.item(i).style['visibility'] = 'hidden';
  }
}
//]]>
et plus loin dans le code de la page avec le menu : <script type="text/javascript">initMenu();</script>or si je le copie dans une page, dans le head et entre des balises script, il est pris en compte et pas si je l'exporte dans un fichier js ; pourquoi ?