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

推荐订阅源

WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
B
Blog
F
Fortinet All Blogs
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
A
About on SuperTechFans
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog
B
Blog RSS Feed

博客园 - 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'
                    }
); 
            }
);