出于范围的目的,如何正确地将此传递给我的滚动处理程序

时间:2018-10-31 15:44:48

标签: javascript jquery

我对这个东西很陌生,所以我对这个问题的基本性质表示歉意。

我为我的Wiki构建了图块显示,将文章显示为图块。我在侧面有导航按钮,以供人们浏览图块(图块容器的高度为500px,每个图块的高度为250px,可以隐藏6或7行图块)。

要处理导航按钮的更新,我使用了从其他SO来源合并而成的滚动处理程序,因此:

var scrollTimer;
$(".rsg_testtiles_display_macro_container").on('scroll', function() {
clearTimeout(scrollTimer);
scrollTimer = setTimeout(function() {
    var RSTilesDisplayScrollResult = false;

    if (!RSTilesDisplayScrollResult) {
        $.each( $(".rsg_testtiles_display_macro_container .rsg_testtiles_display_surround[id]"),function(i,e) {
            if (checkRSTilesDisplayView($(e),false)) {
                updateRSTilesDisplayNavButton(false,e);
                RSTilesDisplayScrollResult = true;
                return false;
            }
        });
        if (!RSTilesDisplayScrollResult) {
            $.each( $(".rsg_testtiles_display_macro_container .rsg_testtiles_display_surround[id]"),function(i,e) {
                if (checkRSTilesDisplayView($(e),true)) {
                    updateRSTilesDisplayNavButton(true,e);
                    RSTilesDisplayScrollResult = true;
                    return false;
                }
            });
        }
    }
}, 250);
});

我的问题是关于范围的-如果我在同一页面上有多个图块显示,我该如何重写它,以便更新正确的显示,而不是全部显示,或者在这种情况下,没有一个显示

我有一种感觉,我需要以某种方式将$ this传递到嵌套函数中,但这似乎无法正常工作。

我尝试了以下方法:

var tilesParentContainer = $(this);
...
scrollTimer = setTimeout(function() {
...
tilesParentContainer.each( $(".rsg_testtiles_display...

并且也尝试过

scrollTimer = setTimeout(function(this) {

我什么也没有得到,或者得到了Uncaught TypeError:b.apply不是一个函数,我完全不理解。

在此先感谢您,这让我整周都生气了。

1 个答案:

答案 0 :(得分:0)

我能够在SO的其他地方找到一些答案。

我不知道可以将其分配给一个范围广泛的变量,然后在嵌套函数中重复使用它。

例如,我在scrollTimer旁边创建了一个var,然后在第一个on函数中将其分配给了它。然后,我可以在整个嵌套函数中使用$(varName).whatever ...对其进行适当的引用。