Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314405
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1387
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-24 10:12
文章分类
文章存档

2014年(18)

2013年(32)

分类: Web开发

2014-03-17 16:18:38

 jQuery提供了扩展接口jQuery.extend(Object)和jQuery.fn.extend(Object),前者是在jQuery对象上进行扩展(同jQuery的工具方法),而后者是在jQuery对象实例集上进行扩展(通常用于制作jQuery插件)。

1.问题引入:

wKiom1MkEMCA4kbuAABZnTGL3ag832.jpg

上图一看就明白了需求。

    点击全选,一组复选框全部选中;

    取消全选,一组复选框全部未选中;

    选中一组复选框中任意一个,如果一组复选框全选中,全选框选中,否则全选框为选中。

2.实现思路

    全选框改变时,更加全选框的状态,更新一组复选框状态;

    一组复选框中任意一个改变状态时,检查一组复选框的状态,如果检查结果是一组复选框全选中,更新全选框为选中状态,否则更新全选框为未选中状态。

3. 具体实现和使用

下文中通过对jQuery.fn.extend(Object)进行扩展来实现需求,并且使用jQuery.extend(Object)将上述需求扩展为jQuery对象上的一个方法。

HTML页面代码:
   



    测试 jQuery extend 方法 和checkbox全选和全取消
   
   
   
   




    全选

   

   

   

   





说明:

    引入JavaScript文件,包括jquery和下面将要封装的功能代码;

    页面定义一组复选框,并且单独定义一个复选框(该复选框的id属性值和其要操作的一组复选框的name属性值一致,如上:sport);

    全选框和一组复选框具备了如上所述命名规范,即可以作为一个整体操作,完成 1 中需求功能只需要为插件提供一个能够唯一标识这一组复选框的id,如:"sport";

    使用时仅需要在页面加载完成后调用jQuery扩展的对象方法jQuery.checkboxHandler(id)即可。


    下面是jQuery扩展实现上述功能的代码:

        
    /**
     * Created with JetBrains WebStorm.
     * User: http://aiilive.blog.51cto.com
     * Date: 14-3-14
     * Time: 下午2:08
     * 增强jQuery中对checkbox的处理,可以对一组checkbox进行全选,全不选操作
     * 需要jQuery支持
     * -------------Notice-------------
     * 使用jQuery.checkboxHandler(id)方法对一组checkbox添加事件
     * id:
     * id的值是一组类型是checkbox的input的name属性值,
     * 并且作为全选和全不选类型是checkbox的input的id属性值
     *
     * Simple:
     * $(document).ready(function () {
            $.checkboxHandler("sport");
        })
     */
    (function ($) {
        jQuery.fn.extend({
            checkboxSelected: function () {
                var id = $(this).attr('id');
                var flag = (typeof $(this).attr('checked') === 'undefined' ) ? true : false;
                $("input[type=checkbox][name=" + id + "]").each(function (i, n) {
                    if (flag) {
                        $(n).removeAttr("checked");
                    } else {
                        $(n).attr('checked', "checked");
                    }
                })
            },
            checkboxCheck: function () {
                var id = $(this).attr('name');
                var flag = false;
                $("input[type=checkbox][name=" + id + "]").each(function (i, n) {
                    if (typeof $(n).attr("checked") === 'undefined') {
                        flag = true;
                        return false;
                    }
                })
                if (flag) {
                    $("#" + id).removeAttr("checked");
                } else {
                    $("#" + id).attr("checked", "checked");
                }
            }
        })
        jQuery.extend({
            checkboxHandler: function (id) {
                $("#" + id).bind("click", function () {
                    $(this).checkboxSelected();
                });
                $("input[type=checkbox][name=" + id + "]").bind("click", function () {
                    $(this).each(function (i, n) {
                        $(n).checkboxCheck();
                    })
                })
            }
        })
    })(jQuery);
阅读(2250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~