6

我创建了一个小 jquery 脚本,但在自定义函数中使用 (this) 时遇到问题。

这是代码:

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

因此,该函数在单击列表项时运行,这很顺利,但 (this) 的值为空

有人知道如何解决这个问题吗?

提前致谢!

4

3 回答 3

2

因为您必须将它传递给函数以便它可以使用它(也可能使用与此不同的 dometh,所以不会造成混淆(已编辑,因为您想要单击的项目)

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

function fadeItems(el)
{       
var slogan = jQuery(el).children('p').html();
于 2012-04-26T14:22:15.083 回答
2

使用应用

fadeItems.apply(this);

这样您就可以指定函数调用的上下文(手动分配thisin的值fadeItems

编辑:正如@KevinB 所指出的,您需要this在父函数中别名:var that = this;,然后传递that给函数,fadeItems.apply(that);

于 2012-04-26T14:24:49.337 回答
2

.call在这里很有用:

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);
    }    
});
于 2012-04-26T14:25:56.893 回答