我需要在此代码块中提供一些帮助:
options.imgs.click(function() {
var allImgs = $("#big img");
$("#big img").each(function(n) {
this.index = n;
})
animateImage(allImgs);
})
};
function animateImage(images) {
for(var i = 0; i < images.length; i++) {
if (images[i].index == 0) {
alert($(this).index)
}
}
}
我的问题是:
$(this).effect('scale', { percent: 200 }, 1000)
不工作。我希望该语句引用索引为0的图像,并将其缩放200%。但是$(this)
并不是指第一张图像。
答案 0 :(得分:2)
只要您调用您的函数,您的“此”变量就会更改:
function test() {
alert(this); // this will be the window object
}
$('p b').click(function() {
alert(this); // this will be the bold element object
test();
});
例如,在这个页面上运行(使用firebug),我可以点击顶部右侧的“询问”和“已查看”项目(它们是粗体)...你得到的是一个来自测试函数的警报,其中此是窗口对象,不粗体元素,因为它在事件处理程序中。
要解决此问题,只需通过以下函数传递您想要处理的对象:
options.imgs.click(function() {
var allImgs = $("#big img");
$("#big img").each(function(n) {
this.index = n;
})
animateImage(allImgs, this);
})
};
function animateImage(images, img) {
for(var i = 0; i < images.length; i++) {
if (images[i].index == 0) {
alert($(img).index)
}
}
}
答案 1 :(得分:0)
基本上你想要的是替换
animateImage(allImgs);
与
animateImage.call(this, allImgs);
您可以将代码重构为此(或类似的东西):
options.imgs.click(function() {
var allImgs = $("#big img");
allImgs.each(function(n) {
this.index = n;
});
allImgs.get(0).effect('scale', { percent: 200 }, 1000);
});
您也可以在each
参数n == 0
内开始效果。 (我在我的示例中没有这样做,因为它与您拥有的代码不完全相同(忽略丑陋的并发问题))。
答案 2 :(得分:0)
当您在单击调用内部时,第一个参数(“this”)是您单击的DOM元素。您的DOM元素是否具有“索引”属性?
我还建议你使用“对象转储”功能(例如:http://weblogs.asp.net/skillet/archive/2006/03/23/440940.aspx)。用法类似于:
$("a").click( function(){
alert( object_dump( this ) )
});
(注意object_dump()函数返回一个字符串,你需要“alert()”它或用它做其他事情。)