视频地址: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 进行组织。

  1. 在 label 标签内放置 input 和文本,可以实现点击文本时选中相应 input 的效果
  2. 使用 checked="checked" 属性,来指定默认的选中项
  3. 单选框列表通过 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 样式,让这个默认显示看起来更加专业和美观,我们所做的努力包含:

  1. 页面背景设为非常浅的灰色(#efefef)
  2. 主体内容加上了边框和白色背景
  3. 主体内容居中(margin-left 和 margin-right 设为 auto)
  4. 清空无序列表 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');}})});
});

这里有几个注意点:

  1. input 的 type 属性刚好作为字体图标的 CSS 名称(checkbox 和 radio)
  2. 使用 jQuery 提供的 is(':checked') 来判断复选框或者单选框是否处于选中状态
  3. 通过 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 事件中,需要当前事件的一些上下文变量:

  1. checkEl:当前点击的复选框或者单选框
  2. checked:当前输入框是否选中
  3. 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 技巧:

  1. 使用 position:absolute 将复选框浮动起来
  2. 设置宽度和高度为 1px,使其在页面显示为一个像素的小黑点
  3. 通过 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>

  

源码和视频下载

三石出品,必属精品!

【三石jQuery视频教程】02.创建 FontAwesome 复选框和单选框相关推荐

  1. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)

    视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  2. 【三石jQuery视频教程】01.图片循环展示_重发

    大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的HTML.CSS和jQuery来实现一个超级简单的图片循环展示效果,先来看下最终的产品: Step1 ...

  3. 【三石jQuery视频教程】01.图片循环展示_再次重发

    之前的文章,由于在博文的底部放有微信公众号的缘故,被管理员判定为: 您好,您的这篇博文内容本身没什么问题,但是,在博文底部存在推广信息内容.... 你们也没告知到底是哪条触犯了博客园的规矩,我就把底部 ...

  4. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  5. jquery实现HTML复选框变单选框

    jquery实现HTML复选框变单选框 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 <scri ...

  6. jQuery分别获取选中的复选框值

    jQuery分别获取选中的复选框值 原文:jQuery分别获取选中的复选框值 function jqchk(){  //jquery获取复选框值    var s='';    $('input[na ...

  7. jquery获取所有选中的复选框

    jquery获取所有选中的复选框 提示:在列表中总有一些需求会在表头用到复选框进行批量操作,在此我介绍一下怎么获取到已选中的复选框值 示例:如下所示,获取到数组之后1,通过ajax传给后台进行处理就好 ...

  8. kendo ui 动态隐藏列_kendoUI动态改变grid复选框变单选框

    最近遇到一个需求需要动态把grid复选框列变成单选框,先上复选grid代码 复选grid 代码效果 查询了kendoUI的官方文档得到解释 官方文档 查询大佬们博客发现: selectable :Bo ...

  9. 分享美化复选框和单选框插件

    复选框和单选框是表单中使用非常频繁的组件,但在多数浏览器上显示比较死板, 大家都知道,在Web的Form中美化是最头痛的,尤其是表单中的"input[type=checkbox]" ...

  10. HTML如何设置复选框、单选框以及默认选项?

    本篇文章主要给大家介绍HTML怎么设置复选框以及单选框的. 我们在网站开发过程中,有时会需要实现类似调查问卷的功能,那么既然是问卷,就避免不了单选或者多选的情况.对于新手朋友来说,或许不太清楚. 下面 ...

最新文章

  1. yii2表单数据检查怎么自定义输出错误_B端产品日记——表单设计
  2. 配置了坐标还是找不到serv_为什么老人家总是这疼那疼,还找不到原因?是矫情还是另有原因...
  3. android页面布局 如何让中间的listview填充剩余部分_不使用css3:flex怎么实现一些常见的移动端布局...
  4. 5.2.6 std::atomic<>主要类的模板
  5. poj 1056 IMMEDIATE DECODABILITY trie树 ——字典树 静态数组版
  6. MFC学习日志(一)
  7. DGIOT实战教程——虚拟ModbusRTU接入
  8. Jekyll 学习笔记
  9. AVS2解码图像管理
  10. 阿迪卫衣79/茅台茅韵两瓶149/南极人内裤4条14.9/八杯水九件套59.9
  11. matlab 定时器timercallback,matlab定时器timer的用法,特别要注意回调函数的参数!...
  12. 线程之插队(join方法)
  13. http://www.apkbus.com/forum.php?mod=viewthreadtid=174440
  14. operator=的用法
  15. java 裁剪网格纸_百度裁减网格纸
  16. java正方形_java编程(11分)求正方形的面积。要求
  17. stm32简单小实例_抓住蝶粉的心,STM32有“利器”!
  18. iText5-PDF
  19. 如何查看服务器机房位置
  20. 1分钟链圈 | 全球加密货币市值反弹598.38亿人民币!成都市将利用区块链等技术推动旅游产业发展...

热门文章

  1. SAP系统如何打NOTE?
  2. C语言必背100代码,C语言必会100代码大全
  3. keli4 指针运算_如何在KEIL中使用MicroLIB | 学步园
  4. 计算机office软件有哪些功能,office2016新功能有哪些?
  5. python可视化编程软件下载_mPython-mPython(图形化编程软件)下载 v0.5.0官方版-下载啦...
  6. css如何调用函数,从CSS调用JavaScript函数
  7. 常规英文字体 电商_最强电商美工逆袭系列1——最全的电商字体应用详解
  8. 针式打印机风格英文字体_可爱漂亮的圣诞节和新年贺卡艺术字体推荐!
  9. 闲论排样/排料算法(nesting)
  10. 在java中调用python程序