一、模拟单复选框
-
单选框们
<input type="radio" id="radio1" name="radio"> <label for="radio1" class="ui-radio"></label><label for="radio1">单选项1</label> <!-- .ui-radio元素是看到的单选框效果,需要紧跟在原生的radio控件的后面 -->
禁用效果的代码(直接
disabled
属性控制):<input type="radio" id="radio5" name="radio" disabled checked> <label for="radio5" class="ui-radio"></label><label for="radio5" class="ml10 mr30 f14">单选项5</label>
-
复选框们
<input type="checkbox" id="checkbox1" name="checkbox"> <label for="checkbox1" class="ui-checkbox"></label><label for="checkbox1">复选项1</label> <!-- .ui-checkbox元素就是肉眼所见的模拟复选框,需要紧跟在原生的checkbox控件的后面 -->
禁用效果的代码(直接
disabled
属性控制):<input type="checkbox" id="checkbox5" name="checkbox" disabled checked> <label for="checkbox5" class="ui-checkbox"></label><label for="checkbox5" class="ml10 mr30 f14">复选项5</label>
-
如何使用?
基本上,就拷贝上面的HTML代码到项目中,就可以了,比传统元素控件就多了个
label
元素(.ui-radio
/.ui-checkbox
的那个label
元素)而已。如果需要兼容IE8,则需要引入相关JS,类似下面代码,直接引入即可。
if (!window.addEventListener) { require.async('common/ui/Radio'); require.async('common/ui/Checkbox'); }
而IE9+浏览器不需要任何JS。
-
实现原理
IE9+使用CSS3选择器
:checked
伪类精准控制单复选框的状态。而IE7,IE8通过JS同步
[checked]
属性,配合属性选择器和相邻选择器实现效果,开发时候,只需要关心单选框、复选框本身就可以了,例如:$(radio).click(function() {}); $(checkbox).click(function() {});
唯一需要注意的,就是我们如果手动通过JS修改单复选框的
checked
状态(非点击行为修改),则我们需要对元素radio
/checkbox
元素使用$().propMatch()
方法同步一下,propMatch
翻译一下就是“属性匹配”的意思。如果引入了Enhance.js,亦可以使用$().refresh()刷新与匹配。
二、作为插件独立使用
如果不需要兼容IE8浏览器,直接引入CSS即可。单选框引入:
<link rel="stylesheet" href="//qidian.gtimg.com/lulu/theme/peak/css/common/ui/Radio.css">
复选框引入:
<link rel="stylesheet" href="//qidian.gtimg.com/lulu/theme/peak/css/common/ui/Checkbox.css">
如果需要兼容IE8浏览器,还需要加载JS文件(jquery文件略):
<script src="//qidian.gtimg.com/lulu/theme/peak/js/common/ui/Radio.js"></script> <script src="//qidian.gtimg.com/lulu/theme/peak/js/common/ui/Checkbox.js"></script>
直接加载就好了,无需任何初始化。