2012-02-03 14 views
9

Estoy creando un menú que se abre y cierra usando jQuery. En términos simples, funciona así:

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 tomo el contenido de open_menu() y lo puso en su lugar de open_menu() en caso .click(), cada funciona como se espera. Si utilizo el código como se muestra arriba, $(this) no puede entender que .click() lo activó y el código no se ejecuta.

¿Hay algo que pueda hacer para que el selector $(this) negocie lo que lo activó y lo guarde en open_menu()?

Respuesta

15

El this que consulte en open_menu es el contexto de la función open_menu, no el controlador de clic del enlace. Que tiene que hacer algo como esto:

open_menu(this); 

function open_menu(that) { 
    $(that).next(... 
2

¿Por qué no simplemente lo pasa como un parámetro?

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

Intenté esto, pero podría no haberlo hecho correctamente. Agregué 'test = $ (this);' justo antes del cambio y lo pasé. Sonido ¿no? – Combobreaker

+0

Lo tengo para trabajar. Tuve que usar 'this', not' $ (this) '. Gracias. – Combobreaker

5

Puede utilizar aplicará a establecer el valor de this en la función.

open_menu.apply(this) 
+0

+1 Responde la pregunta ... * "¿Hay algo que pueda hacer para que el selector' $ (this) 'negocie lo que enciende mientras lo mantiene en' open_menu() '" * –

Cuestiones relacionadas