JQuery nextAll用于获取下一个元素的难点功能

时间:2011-07-08 17:14:53

标签: jquery scroll css-selectors

我们有一个涉及一系列滚动面板的功能。面板中间的当前项li具有类.selected,并由变量$ selectedLeft表示。该类始终传递到滚动后中间li处于中间位置。

我想要的是下一个li在点击时滚动面板,以便该元素位于中间。函数scrollTo是我们函数组成的一部分,工作正常。问题在于选择器。在您选择$selectedLeft.nextAll('li').next().click( function()的单击函数的那一刻,您正在接管。面板不会向上或向下滚动。这应该仅在点击下一个li之后的li时才会出现。

$selectedLeft.nextAll('li').click( function() {
                        myScroll2.scrollTo(0, 32, 200, true);

                    });
                    $selectedLeft.nextAll('li').next().click( function() {
                        myScroll2.scrollTo(0, 64, 200, true);

                    });
                    $selectedLeft.prevtAll('li').click( function() {
                        myScroll2.scrollTo(0, -32, 200, true);

                    });
                    $selectedLeft.prevAll('li').prev().click( function() {
                        myScroll2.scrollTo(0, -64, 200, true);

                    });

因此无论设置有多复杂,问题在于选择器,所以我希望有人能看到它。我尝试添加.eq(0)并且整个功能都无法执行任何操作。

任何想法都错了吗?

非凡

适合所有人的好小提琴http://jsfiddle.net/XHPYF/33/

1 个答案:

答案 0 :(得分:0)

选择器不是问题所在。

jQuery对象$selectedLeft不断变化,但是你写东西的方式只会将你的滚动事件绑定到初始对象。您需要将binddelegate卷轴发送到所有未来的$selectedLeft

同样,当$selectedLeft更改时,您需要解除前一个事件的绑定。

另一个解决方案是检查当前所选li的索引,并检查点击的li是否是一个或两个元素。 (例如对jQuery对象使用`.eq()或数组表示法)这将清除一些“下一步”歧义。