Utiliser ‘$ (this)’ dans une fonction

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; } }