Je crée un menu qui s’ouvre et se ferme à l’aide de jQuery. En termes simples, cela fonctionne comme ceci:
function open_menu() { $(this).next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ width: '235px', }, 500); } function close_menu() { // close code here } status = 'closed'; // set the default menu status $('a').click(function() { switch(status) { case 'closed': open_menu(); break; case 'open': close_menu(); break; } }
Si je prends le contenu de open_menu()
et le mets à la place de open_menu()
dans l’ .click()
, tout fonctionnera comme prévu. Si j’utilise le code comme indiqué ci-dessus, $(this)
ne peut pas comprendre que .click()
déclenché et le code ne s’exécute pas.
Est-ce que je peux faire quelque chose pour que le sélecteur $(this)
négocie ce qui l’a renvoyé tout en le gardant dans open_menu()
?
La this
laquelle vous faites référence dans open_menu
est le contexte de la fonction open_menu
, pas le gestionnaire de clic du lien. Vous devez faire quelque chose comme ça:
open_menu(this); function open_menu(that) { $(that).next(...
Vous pouvez utiliser apply pour définir la valeur de this
dans la fonction.
open_menu.apply(this)
Pourquoi ne pas simplement le passer en paramètre?
function open_menu($this) { $this.next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ width: '235px', }, 500); } function close_menu() { // close code here } status = 'closed'; // set the default menu status $('a').click(function() { switch(status) { case 'closed': open_menu($(this)); break; case 'open': close_menu(); break; } }