1

我正在处理一个页面,其中包含按年份划分的新闻稿列表。该页面有一个默认为当前年份的下拉菜单,但用户也可以选择前一年。我正在使用带有下拉菜单的显示/隐藏来显示所选列表。这部分正在工作。

我还添加了 easypagination 插件,因此每年只显示前四篇新闻稿,并可选择点击页面底部的“OLDER”链接或页码。问题是只有从使用分页的下拉列表中的第一年(在这个例子中,自 2013 年以来的 2012 年只有 3 个新闻稿)。2012 完美运行,但如果你转到 2011,它可以运行,但 class="current" 永远不会到达那个‹li›,并且当前的底部页码永远不会突出显示。

我的问题是如何更改我的代码,以便当用户点击下拉菜单时,函数会识别出操作重置并将 class="current" 附加到正确的第一个‹li›?

这是 JSFiddle http://jsfiddle.net/brianjschneider/GjXJR/

任何帮助将不胜感激!我认为问题/解决方案在这个函数的某个地方:

$.fn.easyPaginate = function (options) {

    var defaults = {
        step: 4,
        delay: 0,
        numeric: true,
        nextprev: true,
        auto: false,
        loop: false,
        pause: 10000,
        clickstop: true,
        controls: 'pagination',
        current: 'current',
        randomstart: false
    };

    var options = $.extend(defaults, options);
    var step = options.step;
    var lower, upper;
    var children = $(this).children();
    var count = children.length;
    var obj, next, prev;
    var pages = Math.floor(count / step);
    var page = (options.randomstart) ? Math.floor(Math.random() * pages) + 1 : 1;
    var timeout;
    var clicked = false;

    function show() {
        clearTimeout(timeout);
        lower = ((page - 1) * step);
        upper = lower + step;
        $(children).each(function (i) {
            var child = $(this);
            child.hide();
            if (i >= lower && i < upper) {
                setTimeout(function () {
                    child.fadeIn('fast')
                }, (i - (Math.floor(i / step) * step)) * options.delay);
            }
            if (options.nextprev) {
                if (upper >= count) {
                    next.fadeOut('fast');
                } else {
                    next.fadeIn('fast');
                };
                if (lower >= 1) {
                    prev.fadeIn('fast');
                } else {
                    prev.fadeOut('fast');
                };
            };
        });
        $('li', '#' + options.controls).removeClass(options.current);
        $('li[data-index="' + page + '"]', '#' + options.controls).addClass(options.current);

        if (options.auto) {
            if (options.clickstop && clicked) {} else {
                timeout = setTimeout(auto, options.pause);
            };
        };
    };
4

0 回答 0