2012-04-26 7 views
6

Creé un pequeño script jquery y tengo un problema para usarlo (esto) en una función personalizada.jquery usando (esto) en la función personalizada

Este es el código:

jQuery("li").click(function() 
{ 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) 
    { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
     { 
      fadeItems(); 
     }); 

    } 
    else 
    { 
     fadeItems();  
    } 

}); 

function fadeItems() 
{  
    var slogan = jQuery(this).children('p').html(); 

    jQuery('#slogan_text').fadeOut(150, function(){ 
     jQuery('#slogan_text').fadeIn(150).html(slogan); 
    }); 

    var content = jQuery(this).children('#post_content_large').html(); 
    jQuery('#content_view').html(content).hide(); 

    var status = jQuery("#readMore").html(); 

    if(status == 'Verbergen') 
    { 
     jQuery('#content_view').fadeIn(500, function(){ 
      jQuery('#content_view').fadeIn(500).html(content); 
     }); 
    } 

    var title = jQuery(this).children('h3').html(); 

    jQuery('#title_content').fadeOut(150, function(){ 
     jQuery('#title_content').fadeIn(150).html(title); 
    }); 
} 

Así que la función se ejecuta al hacer clic en una lista de artículos y que va wel pero los valores de (este) está vacía

Alguien sabe cómo solucionar este problema?

¡Gracias de antemano!

Respuesta

2

.call pueden ser útiles aquí:

jQuery("li").click(function() { 
    var self = this; 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() { 
      fadeItems.call(self); 
     });  
    } 
    else { 
     fadeItems.call(self); 
    }  
}); 
+0

¡Gracias (esto) funcionó! :) –

2

Debido a que se debe pasar a la función para que pueda usarlo (también utilizar tal domething diferente de esto, es menos confuso (editado ya que desea que el elemento se hace clic)

var clicked = this; 
    jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
    { 
     fadeItems(clicked); 
    }); 

function fadeItems(el) 
{  
var slogan = jQuery(el).children('p').html(); 
+0

'this' en ese caso no es el elemento que está buscando. –

+0

@KevinB no leyó que necesitaba el ítem cliqueado, corregido –

2

Uso apply:

fadeItems.apply(this);

de esta manera se puede especificar el contexto de la llamada de función (asignando manualmente el valor de this en fadeItems)

EDIT: como señaló @KevinB, tendrá que alias this en la función madre: var that = this;, y luego pasar that en la función, fadeItems.apply(that);.

+0

Eso funciona muy bien en el 'else {}', pero dentro del animado 'esto' se refiere a los elementos' html' y 'body' –

+0

Ah, buen truco. El principio es el mismo, pero necesita almacenar el contexto en el alcance principal. – Mathletics

Cuestiones relacionadas