如何在另一个$(this)中修复$(this)

时间:2010-12-11 17:48:12

标签: javascript jquery

你在这段代码中给出了一个问题,它给了我$(this).fadeIn()不是函数,有什么想法吗?

$('img').hide().each(function(){
        $(this).load(function(){
            $(this).fadeIn();
        });
    });

3 个答案:

答案 0 :(得分:3)

如果你的意思是修复内部函数中的外部$(this),你可以这样做:

$('img').hide().each(function(){
        var outer = $(this);
        outer.load(function(){
            outer.fadeIn();
        });
    });

答案 1 :(得分:3)

this的值在嵌套函数内部发生变化 - 其值不像其他变量那样被“捕获”。

为避免这种情况,您可以将this分配给另一个变量!

$('img').hide().each(function(){
    var that = $(this);
    that.load(function(){
        that.fadeIn();
    });
});

答案 2 :(得分:0)

您的代码是正确的。不确定问题是什么。在.load()事件处理程序中,this引用了接收事件的元素,因此没有理由在外部this附近关闭。

如果你在.each()中没有做任何其他事情,你可以摆脱它:

示例: http://jsfiddle.net/patrick_dw/b4cNZ/1/

$('img').hide().load(function() {
   $(this).fadeIn(2000);
});

否则,如果您需要进行测试以确保在缓存时图像被显示,您可以这样做:

示例: http://jsfiddle.net/patrick_dw/b4cNZ/2/

$('img').hide().each(function() {
    if (this.complete) {
        $(this).fadeIn(2000);
    } else {
        $(this).load(function() {
            $(this).fadeIn(2000);
        });
    }
});