jQuery根据复选框状态过滤

时间:2012-12-26 12:47:45

标签: jquery checkbox

我正在使用jQuery“可过滤”插件来过滤数据,这个插件最初通过点击类别的名称链接来过滤数据,现在我想更改链接到复选框,所以如果复选框被选中,某些类别显示和如果它被取消选中,它就会隐藏起来。 这是jquery:

(function(jQuery) {
    jQuery.fn.filterable = function(settings) {
        settings = jQuery.extend({
            useHash: true,
            animationSpeed: 1000,
            show: { width: 'show', height: 'show', opacity: 'show' },
            hide: { width: 'hide', height: 'hide', opacity: 'hide' },
            useTags: true,
            tagSelector: '#portfolio-filter input[type=checkbox]',
            selectedTagClass: 'current',
            allTag: 'all'
        }, settings);

        return jQuery(this).each(function(){

            /* FILTER: select a tag and filter */
            jQuery(this).bind("filter", function( e, tagToShow ){
                if(settings.useTags){
                    jQuery(settings.tagSelector).removeClass(settings.selectedTagClass);
                    jQuery(settings.tagSelector + '[value=' + tagToShow + ']').addClass(settings.selectedTagClass);
                }
                jQuery(this).trigger("filterportfolio", [ tagToShow.substr(1) ]);
            });

            /* FILTERPORTFOLIO: pass in a class to show, all others will be hidden */
            jQuery(this).bind("filterportfolio", function( e, classToShow ){
                if(classToShow == settings.allTag){
                    jQuery(this).trigger("show");
                }else{
                    jQuery(this).trigger("show", [ '.' + classToShow ] );
                    jQuery(this).trigger("hide", [ ':not(.' + classToShow + ')' ] );
                }
                if(settings.useHash){

                    location.hash = '#' + classToShow;
                }
            });

            /* SHOW: show a single class*/
            jQuery(this).bind("show", function( e, selectorToShow ){
                jQuery(this).children(selectorToShow).animate(settings.show, settings.animationSpeed);
            });

            /* SHOW: hide a single class*/
            jQuery(this).bind("hide", function( e, selectorToHide ){
                jQuery(this).children(selectorToHide).animate(settings.hide, settings.animationSpeed);  
            });

            /* ============ Check URL Hash ====================*/
            if(settings.useHash){
                if(location.hash != '')
                    jQuery(this).trigger("filter", [ location.hash ]);
                else
                    jQuery(this).trigger("filter", [ '#' + settings.allTag ]);
            }

            /* ============ Setup Tags ====================*/
            if(settings.useTags){
                jQuery(settings.tagSelector).click(function(){
                    jQuery('#portfolio-list').trigger("filter", [ jQuery(this).attr('value') ]);

                    jQuery(settings.tagSelector).removeClass('current');
                    jQuery(this).addClass('current');
                });
            }
        });
    }
})(jQuery);

我正在使用“hash”方法,因此当选中相对复选框时,它会在页面末尾添加类似“#categoryname”的内容,然后显示与该复选框相关的一些项目,现在我想要隐藏取消选中该复选框时的那些项目,并删除该哈希值。

0 个答案:

没有答案