惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
IT之家
IT之家
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - Franky
I
InfoQ
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网
博客园 - 聂微东
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
D
Docker

博客园 - andyran

xp下多站点及asp.net mvc3配置 获取Controller.ModelState中的所有错误信息 CSS line-height:XX在IE7下面与IE6、IE8、FireFox高度不一样 HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案 css中div高度自适应的方法(兼容FF IE) Win7安装SQL2005的IIS7设置 CSS兼容与标准,HACK技巧 - andyran - 博客园 通过jquery选择li菜单实现无刷新css效果 - andyran - 博客园 .NET打包安装MSDE以及安装和卸载 为FCKEDITOR添加导入Word文档功能 PEAR之DB_DataObject快速安装 c#实现随鼠标移动窗体 SVN使用技巧 - 不要把不必要的文件版本化 svn架设快速入门(转) utf8的bom问题 Flex中的拖放(Drag-Drop)事件入门 续:使用FLEX为上传的图片添加水印 使用FLEX实现简单WEB在线拍照功能 使用jQuery编写一个UBB编辑器
编写jQuery插件来扩展checkbox
andyran · 2007-04-28 · via 博客园 - andyran

本文主要实现两个功能,第一使用图片代替html checkbox一成不变的样式并可以使用checkbox的正常功能,其次是前者的基础之上实现checkbox的全选,全不选和反选.同时也捎带介绍了jQuery最基本的插件写法.

jQuery插件的编写可以通过jQuery.fn.extend方法来实现

jQuery.fn.extend({
    foo: 
function() {
        alert('i'm foo');
    }
,
    bar: 
function() {
        alert('i'm bar');
    }

}
)

在接下来的代码中,我们就可以在jQuery对象中直接使用这两个方法了

$(function(){
    $('#btn').click(
function() {$(this).foo();});
    $('#btn1').click(
function() {$(this).bar();});
}
)

接下来介绍如何编写一个简单的checkbox插件

首先实现checkbox的单选以及改变checkbox的样式,我们需要准备两张图片,一张是选中时,另一张是未选中时,实现的原理很简单,首先把checkbox的原本样式隐藏,然后构造一个<img>对象,分别赋于src和name属性,添加click事件,实现在选择的时候图片替换.最后插入这个构造对象.

            checkbox: function(opt) {
                $(
this).hide().each(function(){
                            $('
<img>')
                            .attr(
{src: this.checked ? opt.checked : opt.unchecked, name: this.name})
                            .click(
function(){
                                
var check = $(this).next()[0].checked == true;
                                $(
this)
                                    .attr(
{src: check ? opt.unchecked : opt.checked})
                                    .next()[
0].checked = !check;                                
                            }
)
                            .insertBefore(
this);
                }
);
            }

完成之后,如何使用呢?

            $('input[@type=checkbox]').checkbox(
                {
                    checked: 'checked.gif', 
                    unchecked: 'unchecked.gif'
                });

把它绑定到$(function(){})中

第二步,实现全选,全不选和单选,网上已经有很多这样的例子了,在这里我添加了一行图片替换的代码来模拟选择和取消选择.

            toggleCheckbox: function(o, opt) {
                o 
= o || 'on';
                
return this.each(function() {
                    
switch(o) {
                        
case 'on':                            
                            $('img[@name
='+this.name+']').attr({src: opt.checked});
                            
this.checked = true;
                            
break;
                        
case 'off':
                            $('img[@name
='+this.name+']').attr({src: opt.unchecked});
                            
this.checked = false;
                            
break;
                        
case 'toggle':
                            $('img[@name
='+this.name+']').attr({src: this.checked ? opt.unchecked : opt.checked});
                            
this.checked = !this.checked;
                            
break;
                    }

绑定下面的代码到$(function(){})中使用

            // 全选
            $('input[@name=btn1]').click(function() {
                $('input[@type
=checkbox]').toggleCheckbox(
                    'on', 
                    
{
                        checked: 'checked.gif', 
                        unchecked: 'unchecked.gif'
                    }
); 
            }
);