在函数中使用jquery $(this)

时间:2013-04-11 16:34:46

标签: javascript jquery

快速说明: 我知道在函数中使用$(this)是行不通的,因为它不在合适的范围内。我也看到过其他类似的问题。我还是无法弄清楚如何修复我的场景。

目标:我正在尝试使用jQuery构建全景照片查看器。我有它工作,但我需要多个实例。所以我只需要瞄准我正在徘徊的那个。

代码:

jsFiddle:http://jsfiddle.net/kthornbloom/5J3rh/

简化代码:

var hoverInterval;

function doStuff() {

/* The next line is the one in question */

    $(this).animate({
      /* stuff happening */
    });
}

$(function() {
    $('.pan-wrap').hover(
        function() {
            /* stuff happening */
            hoverInterval = setInterval(doStuff, 250);
        },
        function() {
            clearInterval(hoverInterval);
   });
});

2 个答案:

答案 0 :(得分:2)

你有范围问题,这在doStuff是窗口上下文中。

使用proxy()

hoverInterval = setInterval($.proxy(doStuff,this), 250);

答案 1 :(得分:2)

您可以明确地将this传递给doStuff

setInterval(function() {
    doStuff(this);
}, 250);

doStuff你可以做到:

function doStuff(element) {
    ...
}

或者您可以为this明确设置doStuff的值,如下所示:

setInterval(function() {
    doStuff.call(this);
}, 250);

然后您仍然可以在$(this)内使用doStuff而不更改其任何参数。有关call的详细信息,请参阅Function.prototype.call及其朋友Function.prototype.apply