【问题标题】:If-statement always returning true in jQueryjQuery 中的 if 语句总是返回 true
【发布时间】:2014-07-17 14:26:46
【问题描述】:

有人提出了类似的问题,但我在这些主题中找不到任何帮助。

看看this fiddle。右侧有一个菜单,可让您滚动到其他部分。

应该发生的是,例如,当您单击“3”时,菜单中的“3”将获得“可见”类(以较大的字体显示)。然而,出于某种原因,第一个列表项总是得到这个类。我认为这是因为在下面的 if 语句中,第一个 div 的偏移量为零,因此被评估为 true,这是不正确的。

    $("body > div").each(function () {
        var $this = $(this),
            nextSection = $this.next("div"),
            offsetT = $this.offset().top;
        if (offsetT == 0) {
            $("nav a").removeClass("visible");
            $("a#" + $this.attr("id") + "-button").addClass("visible");
            console.log("a#" + $this.attr("id") + "-button");
        }
    });

另一种解释可能是出现问题,因为该函数是作为回调调用的。我是故意这样做的,因为当它作为回调调用时,应该没有动画,并且应该将一个容器捕捉到窗口顶部:因此只能有一个元素具有offset == 0。但正如你所见,这行不通。

类必须在 SnapIt 函数中设置,因为该函数在其他地方也可以使用。

Where did I go wrong?

【问题讨论】:

标签: jquery each offset


【解决方案1】:

我想你希望在滚动时选择正确的数字然后你需要更改:
if (offsetT == 0)if (offsetT == posToScroll)

Fiddle

理性

【讨论】:

    【解决方案2】:

    第一个 <div> 总是得到这个类,因为它是窗口顶部的那个,所以 它有0 偏移量。因此

    if (offsetT == 0) {
    

    仅在这种情况下评估为真。

    【讨论】:

    • 你是对的,我错了。我想对比一下可视区域,应该找到如下:el.offset().top - $(window).scrollTop().
    猜你喜欢
    • 2016-01-04
    • 2015-12-16
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多