Bonjour,
Je rencontre un problème avec un menu dans mon thème Wordpress.
WP 5.6.1 et le thème (free) c'est "Minimal Grid" v1.2.9.
Vous pouvez voir une version du site en ligne ici :
http://mobilier.zuleika-arts.fr/
Le site en ligne est en version WP 5.5.3 et "Minimal Grid" v1.0.8.
Mon problème est que quand on clique sur un lien d'un sous-menu il se repli. Je voudrais qu'il reste déplié.
Tout a l'air de se passer dans le fichier script.js de Minimal Grid.
(minimal Grid > assets >Thememattic > js > script.js)
Je vous mets ici un extrait de script.js
Version 1.2.9 (sur laquelle je travaille en local).
La plupart des mise en commentaire ne sont pas de moi (sauf >>>>>>> etc)
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 n.mobileMenu = { init: function () { this.toggleMenu(); this.menuArrow(); }, toggleMenu: function () { e('.nav-toogle').on('click', function (event) { e('body').toggleClass('extended-menu'); }); e('.main-navigation').on('click', 'ul.menu a i', function (event) { event.preventDefault(); var ethis = e(this), eparent = ethis.closest('li'), esub_menu = eparent.find('> .sub-menu'); // console.log(esub_menu.css()); // if (esub_menu.css('display') == 'none') { // console.log('aye'); // esub_menu.slideDown('300'); // } if(ethis.hasClass('active')) { esub_menu.slideUp('300'); ethis.removeClass('active'); } else { esub_menu.slideDown('300'); ethis.addClass('active'); } //else if (esub_menu.css('display') == 'block') { // console.log('aye'); // esub_menu.slideUp('300'); // ethis.removeClass('active'); // } // else { // //console.log('aye'); // esub_menu.slideDown('300'); // ethis.addClass('active'); // } return false; }); e('.main-navigation').on('focus', '.menu-item-has-children > a', function(event) { var ethis = e(this), eparent = ethis.parent('li'), esub_menu = eparent.find('> .sub-menu'); // console.log(esub_menu); if(ethis.hasClass('active')) { esub_menu.slideUp('300'); ethis.removeClass('active'); } else { // esub_menu.slideDown('300'); >>>>>>>>>>> 1 autre problème résolu ethis.addClass('active'); } return false; }); }, menuArrow: function () { if (e('.main-navigation ul.menu').length) { e('.main-navigation ul.menu .sub-menu').parent('li').find('> a').append('<i class="icon-nav-down">'); } } };
J'ai commenté esub_menu.slideUp('300'); "1 autre problème résolu" : le fait que le menu parent se dépliait lorsqu'on cliquait dessus.
(Cette discussion initialement ouverte dans le forum "Wordpress" est devenue un pb Javascript)
Mon problème restant :
Je voudrais empêcher le sous-menu de se replier.
J'ai placé un console.log juste avant le "return false;" de la méthode, je le vois donc apparaître à chaque manipulation du menu, mais lors du repliement intempestif après un clique sur un sous-menu la console n'affiche rien.
La méthode n'est pas sollicitée à ce moment.
J'ai ajouté une méthode pour forcer le sous-menu à s'ouvrir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if(ethis.hasClass('active')) { esub_menu.slideUp('300'); ethis.removeClass('active'); } else { // esub_menu.slideDown('300'); ethis.addClass('active'); } console.log('Test'); //<<<<<<<<<<<<<<<<<<<<<<<< return false; });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 n.mobileMenu = { init: function () { this.toggleMenu(); this.menuArrow(); this.sousMenu(); // <<<<<<<<<<<<< },Mais si le sous-menu finit par s'afficher, il se referme d'abord et se réouvre ensuite.
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 sousMenu: function(){ e(".current-menu-item").closest(".menu-item-has-children").each(function() { let ethis = e(this).find("a"), eparent = ethis.parent('li'), esub_menu = eparent.find('> .sub-menu'); if (!ethis.hasClass('active')) { esub_menu.slideDown('300'); ethis.addClass('active'); } });
Je voudrais l'empêcher d'avoir l'idée de se refermer.
Quelque chose replie le sous-menu en amont de cette méthode.
Et ce n'est qu'après que la méthode est exécutée, et rouvre le sous-menu.
Je n'arrive pas à trouver ce qui s'exécute aussitôt après le clique et avant que la méthode soit appelée, et qui replie le sous-menu.
Je vois partout qu'il s'agit d'un "mobileMenu" un "toggleMenu" qui donc doit se comporter de manière à toujours se refermer en premier.
Je ne trouve pas comment éviter cela.
Merci pour votre aide
Partager