为什么这个属性不会改变?

时间:2011-04-18 09:57:11

标签: jquery

在下面的代码中,最后一行没有设置src属性。为什么呢?

$("div.galerina").each(function(){
    var gal=$(this);
    var bullet=gal.children("img.galerina1");
    var width=12*(gal.children("img").size())+'px';
    gal.children("p").css({width:width})

    gal.children("img").each(function(){
    var img=$(this);
    gal.children("p").append("<img class='bullet' src='images/bullet1.png'></img>");
    $("img.bullet").last().click(function(){
        bullet.animate({opacity:0},300,function(){
            bullet.css({display:'none'});
            bullet=img;
            img.css({display:'block'});
            img.animate({opacity:1},300);
        });

    })
})
gal.children("img.bullet").first().attr("src","images/bullet2.png")
})

LIVE VERSION HERE!!!

5 个答案:

答案 0 :(得分:2)

除非你在其他地方创造了gal,否则它超出了范围。您可以在每个函数的第一个函数内部创建一个var gal,但这是每个函数的本地函数。

gal很可能在外面未定义。因此,只需将第一个()。attr ....行放在每个函数的外部。

答案 1 :(得分:2)

当您尝试使用它来更改子弹图像时,

gal不在范围内。

您需要在传递给$("div.galerina").each()的函数中移动最后一行,或者在使用之前重新初始化gal

$("div.galerina").each(function() {
    var gal = $(this);
    gal.children("img.bullet").first().attr("src", "images/bullet2.png");
});

答案 2 :(得分:0)

此外,

<img class='bullet' src='images/bullet1.png' />

答案 3 :(得分:0)

只需使用gal.children进行尝试,因为gal已在$(this)处启动。无需$(gal)

$(img)

相同

答案 4 :(得分:0)

首先:你为什么双重三重构建一个jQuery元素? var gal = $(this);是一个正确的jQuery元素强制转换。 从那里加仑。而不是$(gal)。 那么即使你不需要,也请设置分号。可读性原因。

我认为你最后一行的gal元素超出了范围。 你在$(“div.galerina”)的范围内定义了gal。每个(function(){...});在外面它不再可访问。