视频地址:http://v.qq.com/page/m/8/c/m0150izlt8c.html
大家好,欢迎来到【三石jQuery视频教程】,我是您的老朋友 - 三生石上。
今天,我们要通过基本的HTML、CSS、jQuery以及字体库FontAwesome来实现复选框和单选框,先来看下最终的产品:
需要特别注意的是,在这个例子中,我们可以通过 TAB键来使复选框或者单选框获取焦点,并将其颜色改为绿色。
Step1:网站目录
网站目录非常简单,包含三部分:lesson2.html文件、lib目录。
其中 lesson1.html 包含了一个页面最基本的组成部分,正确的设置 DOCTYPE 有助于页面在现代浏览器中正确渲染。
<!DOCTYPE html> <html> <head> <title>02.创建FontAwesome复选框和单选框 - 三石jQuery视频教程</title> </head> <body> </body> </html>
lib目录仅包含了最新的 jQuery 库;以及最新的 FontAwesome 库(CSS文件和相应的字体文件)。
Step2:页面结构
为页面添加基本的 html 标签,使用列表标签 ul-li 进行组织。
- 在 label 标签内放置 input 和文本,可以实现点击文本时选中相应 input 的效果
- 使用 checked="checked" 属性,来指定默认的选中项
- 单选框列表通过 name 属性进行分组(同一个分组内的单选框,同时只能有一个处于选中状态)
<!DOCTYPE html> <html> <head> <title>02.创建FontAwesome复选框和单选框 - 三石jQuery视频教程</title> </head> <body> <div id="main"> <h2> 02.创建FontAwesome复选框和单选框 </h2> <h4> 复选框列表 </h4> <ul> <li> <label> <input type="checkbox"> 复选框一 </label> </li> <li> <label> <input type="checkbox" checked="checked"> 复选框二 </label> </li> <li> <label> <input type="checkbox"> 复选框三 </label> </li> </ul> <h4> 单选框列表 </h4> <ul> <li> <label> <input name="group1" type="radio"> 单选框一 </label> </li> <li> <label> <input name="group1" type="radio" checked="checked"> 单选框二 </label> </li> <li> <label> <input name="group1" type="radio"> 单选框三 </label> </li> </ul> </div> </body> </html>
此时的页面显示效果:
Step3:CSS样式
下面我们来创建基本的 CSS 样式,让这个默认显示看起来更加专业和美观,我们所做的努力包含:
- 页面背景设为非常浅的灰色(#efefef)
- 主体内容加上了边框和白色背景
- 主体内容居中(margin-left 和 margin-right 设为 auto)
- 清空无序列表 ul-li 的默认样式
<style> body { background-color: #efefef; } #main { border: solid 1px #ccc; padding: 10px; background-color: #fff; max-width: 500px; margin: 100px auto; } ul { list-style-type: none; padding: 0; margin: 0; } </style>
此时的页面显示效果:
Step4:引入FontAwesome字体
在页面 head 中添加对 FontAwesome 字体的引用:
<link href="lib/fa/css/font-awesome.css" rel="stylesheet">
在页面底部引入 jQuery 库,并在 DOMReady 中动态添加字体图标到每一个复选框或者单选框的后面:
<script> $(function() { $('[type=checkbox],[type=radio]').each(function() { var checkEl = $(this); $('<i>', { 'class': 'fa fa-check' }).insertAfter(checkEl); }); }); </script>
其中CSS 类 fa 是每个图标字体所必须的, fa-check 指定了某个具体的图标字体。
此时的页面效果:
Step5:自定义复选框和单选框 CSS 类
虽然我们可以直接使用 FontAwesome 预定义的图标字体 CSS 类,比如:
- 复选框:fa-square-o
- 选中的复选框:fa-check-square-o
- 单选框:fa-circle-o
- 选中的单选框:fa-dot-circle-o
但是如果直接这样来引用的话,会让 JavaScript 代码变得很乏味并且容易出错,比如将复选框改为选中状态:
checkIconEl.addClass('fa-check-square-o').removeClass('fa-square-o');
因此,我们决定自定义 CSS 类,来实现复选框的字体图标,我们所期望的复选框的 HTML 结构:
<label> <input type="checkbox"> <i class="fa checkbox"> 复选框一 </label>
注意:这里使用 checkbox 字符串作为图标字体的 CSS 类,不是随意写的。这个字符串正好就是 input 的 type 属性,从而可以简化 JavaScript 代码。
相应的,选中的复选框的 HTML 结构:
<label class="checked"> <input type="checkbox"> <i class="fa checkbox"> 复选框一 </label>
下面,我们就可以根据 FontAwesome 官网页面来定义我们自己需要的 CSS 类:
.fa.checkbox:before { content: "\f096"; } label.checked .fa.checkbox:before { content: "\f046"; } .fa.radio:before { content: "\f10c"; } label.checked .fa.radio:before { content: "\f192"; }
Step6:复选框和单选框的初始状态
根据前面假设的 HTML 结构和自定义图标 CSS,我们可以完成 DOMReady 的初始化操作:
$(function() { $('[type=checkbox],[type=radio]').each(function() { var checkEl = $(this); $('<i>', { 'class': 'fa ' + checkEl.attr('type') }).insertAfter(checkEl); if(checkEl.is(':checked')) { checkEl.parent('label').addClass('checked'); } }) }); });
这里有几个注意点:
- input 的 type 属性刚好作为字体图标的 CSS 名称(checkbox 和 radio)
- 使用 jQuery 提供的 is(':checked') 来判断复选框或者单选框是否处于选中状态
- 通过 parent 函数来查找某个元素的直接父元素(immediate parent)
页面的初始效果:
Step7:同步复选框和单选框状态到字体图标
下面我们来完整字体图标的状态同步,首选注册 change 事件:
$('[type=checkbox],[type=radio]').change(function() { var checkEl = $(this); var checked = checkEl.is(':checked'); var labelEl = checkEl.parent('label'); if(checkEl.is('[type=checkbox]')) { // checkbox } else { // radio } });
在 change 事件中,需要当前事件的一些上下文变量:
- checkEl:当前点击的复选框或者单选框
- checked:当前输入框是否选中
- labelEl:当前输入框的直接父元素(label标签)
还需要知道当前点击的是复选框还是单选框,从而进行不同的处理,复选框的处理比较简单:
if(checked) { labelEl.addClass('checked'); } else { labelEl.removeClass('checked'); }
单选框的处理相对复杂点,因为我们在每次选中单选框时,都要先清空同一分组内的其他单选框的状态:
var radioName = checkEl.attr('name'); var radioEls = $('[type=radio][name='+ radioName +']'); radioEls.parent('label').removeClass('checked'); labelEl.addClass('checked');
最后,我们只需要隐藏前面的 input 输入框就行了:
[type=checkbox], [type=radio] { display: none; }
此时的页面效果:
Step8:响应TAB键,以及焦点样式
如果我们的示例就此结束,似乎也很完整。但是缺少一个重要的功能,此时的复选框和单选框不再响应 TAB键了。
我们分别在页面顶部和底部放置一个 input[type=text],就能方便的看到效果了,在第一个文本输入框按下 TAB键,会直接跳转到第二个文本输入框:
怎么办?
应该是 display:none 导致 input[type=checkbox] 不再响应 TAB键了,但是我们必须要把他隐藏掉才行啊!
没关系,除了使用 display:none 隐藏掉复选框,我们可以让复选框显示出来,但是你却看不到:
[type=checkbox], [type=radio] { position: absolute; width: 1px; height: 1px; clip: rect(0 0 0 0); }
这里的 CSS 技巧:
- 使用 position:absolute 将复选框浮动起来
- 设置宽度和高度为 1px,使其在页面显示为一个像素的小黑点
- 通过 clip:rect(0 0 0 0) 设置裁剪矩形为空,最终让你看不到这个复选框,但是这个复选框还是存在的
注:clip 属性仅可用来裁剪绝对定位元素,对于 position:static 或者 position:relative 的元素无效。
这还不算结束,我们还需要复选框获取焦点时,能有样式的改变,便于用户察觉:
$('[type=checkbox],[type=radio]').focus(function(){ $(this).parent('label').addClass('focusit'); }).blur(function() { $(this).parent('label').removeClass('focusit'); });
以及相应的 CSS 样式:
label.focusit { color: green; }
最终的页面效果:
Step10:完整的JavaScript代码
最后,来看下完整的 JavaScript 代码:
<script> $(function() { $('[type=checkbox],[type=radio]').each(function() { var checkEl = $(this); $('<i>', { 'class': 'fa ' + checkEl.attr('type') }).insertAfter(checkEl); if(checkEl.is(':checked')) { checkEl.parent('label').addClass('checked'); } }).change(function() { var checkEl = $(this); var checked = checkEl.is(':checked'); var labelEl = checkEl.parent('label'); if(checkEl.is('[type=checkbox]')) { if(checked) { labelEl.addClass('checked'); } else { labelEl.removeClass('checked'); } } else { var radioName = checkEl.attr('name'); var radioEls = $('[type=radio][name='+ radioName +']'); radioEls.parent('label').removeClass('checked'); labelEl.addClass('checked'); } }).focus(function(){ $(this).parent('label').addClass('focusit'); }).blur(function() { $(this).parent('label').removeClass('focusit'); }); }); </script>
源码和视频下载
三石出品,必属精品!
相关推荐
【三石导航.rar】是一个压缩包文件,其中包含了一个简洁且高效的导航系统。这个导航系统被称为"三石导航",其特点在于它无广告、无弹窗,为用户提供了一个清爽的浏览体验。文件大小适中,表明设计者在保证功能的同时...
- fonts文件夹:存放图标字体文件,例如FontAwesome。 - Content文件夹:放置静态文件,如xml文件、CSS样式表。 - App_Start文件夹:放置应用初始化类。 - Controllers文件夹:存放控制器类,是MVC框架中的C...
[精选]理财-三石投资.pptx
主要功能:0),系统统计,统计影片总数,近日更新,在线人数,计数器;1),网吧开关模块,IP管理模块;2),影片分类浏览模块;3),新闻公告模块;4),影片浏览模块;5),影片查询、排序;6)影片推荐;...
教师可以创建课程,发布课程内容,管理课程作业和测试等操作。 该全站系统采用PHP语言和MySQL数据库开发,前端采用Bootstrap框架和jQuery库实现页面样式和交互效果。同时,采用MVC架构模式,提高代码可维护性和扩展...
本文将简要介绍毕设的背景、目的、设计思路和实现方法。 ## 背景 随着互联网技术的发展,计算机科学与技术专业的学生越来越多,他们需要一个能够交流学习、分享经验的平台。然而,目前很多学校的校内网并没有提供...
本毕设的目标是设计和开发...采用JQuery和Bootstrap框架,实现网站的响应式设计,确保在各种设备上都能正常使用。 该程序将为亿网家教网站提供一个完整的管理解决方案。它将简化网站管理流程,提高用户的体验,使网站
同时,本系统前台应该能够支持多种不同的格式化方式,如文本、图片、视频等。此外,本系统前台应该具有良好的可扩展性,方便后期进行功能扩展和升级。 ## 系统设计方案 在本毕业设计中,我们将采用PHP作为主要的...
5. 动态发布和浏览:用户可以发布和浏览其他用户发布的动态,包括文字、图片和视频等。 ## 实现方式 为了实现上述功能,我们将使用以下技术和工具: 1. PHP LDU v702 汉化版:该框架为本毕设提供了基础的Web应用...
简单介绍下python的*index()*方法: 查找参数是否在list、tuple等内部,若存在返回第一个index,不存在会报ValueError。 name = ["a", "ying", "de", "san", "shi", ... File "C:\Users\阿莹的三石\Desktop\test.py",
前端框架使用 Bootstrap 和 jQuery,后端框架使用 CodeIgniter。系统采用 MVC 模式进行开发,具有良好的代码结构和可维护性。 ## 系统功能 1. 域名查询:用户可以通过输入域名进行查询,系统将自动获取 Whois 信息...
hillstone 山石网科 三石防火墙固件,很好用,是5.0版本 SG6000-M-5.0R4P12 OS,官方文件
SSM框架是Java Web开发中常用的三大框架整合,包括Spring、Spring MVC和MyBatis。这个框架组合提供了全面的企业级应用开发解决方案,涵盖了控制层、服务层和数据访问层的管理。下面将详细介绍SSM框架的各个组成部分...
该网站将提供电影和电视剧的在线观看和下载服务,并且拥有用户管理系统和影片管理系统。 ## 功能列表 以下是该网站的主要功能: - 用户注册、登录、找回密码、个人信息修改等基本用户管理功能。 - 影片的分类、...
HillStone最新配置手册
宰相杨炎在建中元年创建此制度,取消了租庸和其他杂税,将税收集中在地税和户税中,按户等和土地面积征收,夏季和秋季两次征收,简化了税收体系,增加了政府的财政收入。 这些制度反映了隋唐时期国家对土地和劳动力...
9. **用户界面设计**:使用HTML、CSS和JavaScript(可能配合jQuery等库)创建用户友好的界面,实现交互效果,如表单提交、分页显示和数据筛选。 10. **Ajax技术**:为了提供更好的用户体验,系统可能采用了Ajax进行...
ASP.NET和ACCESS是两种在开发Web应用程序中常用的工具,尤其在构建视频点播系统时,它们可以发挥重要的作用。在本项目"ASP.NET+ACCESS视频点播系统设计"中,我们将探讨如何结合这两种技术来创建一个高效、用户友好的...
20. 三石图书文化传播网(3stonebook/):这个网站提供了丰富的电子书籍资源,涵盖了文学、历史、哲学等领域,供读者下载和阅读。 21. 电子图书基地(kahn.xj.cninfo.net/ljw/):这个网站提供了丰富的电子书籍资源...
1. **实习经历**:实习生在三石律师事务所实习,得到了江律师和其他律师的指导,了解了律师工作的具体环节,如咨询、会见委托人、当事人、调解和庭审等。 2. **人际关系与人际交往**:实习过程让实习生意识到社会...