在函数中使用jquery $(this)

umodi 发布于 2019-03-09 javascript 最后更新 2019-03-09 14:39 2 浏览

快速描述: 我知道在函数中使用$(this)将不起作用,因为它不在正确的范围内。我也看到过其他类似的问题。我仍然无法弄清楚如何修复我的scenerio。 目标:我正在尝试使用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);
   });
});
已邀请:

wanimi

赞同来自:

你有范围问题,这在doStuff是窗口上下文中。 使用proxy()

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

snon

赞同来自:

您可以将this显式传递给doStuff

setInterval(function() {
    doStuff(this);
}, 250);
doStuff中你可以这样做:
function doStuff(element) {
    ...
}
或者您可以为doStuff显式设置this的值,如下所示:
setInterval(function() {
    doStuff.call(this);
}, 250);
然后你仍然可以在doStuff中使用$(this)而不改变它的任何参数。有关call的更多信息,请参阅Function.prototype.call及其朋友Function.prototype.apply