if语句总是在jQuery中返回true

时间:2014-07-17 14:26:46

标签: jquery each offset

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

看看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?

2 个答案:

答案 0 :(得分:1)

我认为您想要在滚动选择正确的数字时需要更改:
if (offsetT == 0)if (offsetT == posToScroll)

Fiddle

理性

if (offsetT == 0)将始终选择菜单项1,因为此菜单项的偏移量为0.将if语句更改为if (offsetT == posToScroll)表示选择窗口滚动到的那个。

答案 1 :(得分:0)

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

if (offsetT == 0) {

仅在其案例中评估为真。