自定义表单——jQuery制作个性化Checkbox
要让表单中的元素具有个性化风格,仅仅通过样式来实现是相当困难的,大家都很清楚,每种内核的浏览器、每种系统平台下对form元素解析的风格都是不一致的。如果你想让form元素在各种平台或者说各种浏览器具有统一的样式风格,仅仅通过CSS来制作是很难达到统一的标准,但实现他也并不是一件很难的事情,你只要借助jQuery就能轻松的实现。那么今天开始一起来学习使用jQuery制作表单元素的系列,让你不在为此感到头痛。
今天我们就先来看第一个实例,这个实例是由Martin Angelov给我们带来的《Better Check Boxes with jQuery and CSS》。在这个简短的教程中,我们将一起学习如何通过jQuery来美化表单中的checkbox。只需要通过jQuery写一个插件,就可以按照自己的需求来更换浏览器默认的样式,但当用户不支持javaScript时,浏览器又能以默认的风格显示。具体效果如下面的DEMO所示:
HTML Markup
第一步你需要创建一个checkbox表单的HTML结构。以及需要创建另外一个替换默认checkbox表单的结构。
<form action="./" method="post"> <ul> <li> <label for="ch_effects">Display effects:</label> <input type="checkbox" id="ch_effects" name="ch_effects" data-on="show effects" data-off="hide effects" /> </li> <li> <label for="ch_location">Enable Location tracking:</label> <input type="checkbox" id="ch_location" name="ch_location" checked="checked" /> </li> <li> <label for="ch_showsearch">Include me in search results:</label> <input type="checkbox" id="ch_showsearch" name="ch_showsearch" /> </li> <li> <label for="ch_email">Email notifications:</label> <input type="checkbox" id="ch_email" name="ch_emails" data-on="ON" data-off ="OFF" /> </li> </ul> </form>
我们将复选框和描述文字都放在了列表中,从用户的交互点出发,我们点击label时能选中/取消选中相应的复选框。在HTML5中我们还可以使用“data”属性来指定一些label。在此例中我们使用了date-on和date-off用来设置选中/取消时的label。
上面的代码是默认表单的HTML,我们还需要一个新的HTML结构,主要用来更换默认复选框的HTML标记:
<span class="tzCheckBox checked"> <span class="tzCBContent">ON</span> <span class="tzCBPart"></span> </span>
当我们的插件调入进来后,他会遍历所有复选框,把上面的代码插入到复选框后面,并在同一时间把默认复选框隐藏。并使用.checked类来控制复选框是选中/取消状态。
CSS Code
首先简单的定义一下默认的表单样式。
form ul { list-style: none; } form li { padding: 15px; } form li:nth-child(even) { background: #ccc; } form label { display: inline-block; color: #333; font-size: 20px; }
当然你可以根据你自己的需求进行更理想的样式设置。另外我们使用一张背景图片来修改替代默认复选框的样式,上面绿色部分是代表复选框选中状态,而下面红色部分代表复选框未选中状态,而且其宽度跟随说明文字自适应宽度。下图所示的就是复选框的样式所作的具体说明:
我们使用一个透明的PNG背景图片来修改替代默认复选框元素的样式,图片上半部分红色部分用来美化选中状态,而下面的大红色是用来美化取消状态,并且具有自适应宽度,下面我们来看看具体代码
jQuery.tzCheckbox.css
/*==========jQuery.tzCheckbox.css==============*/ .tzCheckBox{ background:url('images/bg-tzcheckbox.png') no-repeat right bottom; display:inline-block; min-width:60px; height:33px; white-space:nowrap; position:relative; cursor:pointer; margin-left:14px; } .tzCheckBox.checked{ background-position:top left; margin:0 14px 0 0; } .tzCheckBox .tzCBContent{ color: white; line-height: 31px; padding-right: 38px; text-align: right; } .tzCheckBox.checked .tzCBContent{ text-align:left; padding:0 0 0 38px; } .tzCBPart{ background:url('images/bg-tzcheckbox.png') no-repeat left bottom; width:14px; position:absolute; top:0; left:-14px; height:33px; overflow: hidden; } .tzCheckBox.checked .tzCBPart{ background-position:top right; left:auto; right:-14px; }
jQuery Code
接下来我们用jQuery来创建一个tzCheckbox的插件。用来实现复选框的选中/取消功能。
(function($){ $.fn.tzCheckbox = function(options){ //定义ON/OFF标签 options = $.extend({ labels: ['ON','OFF'] },options); return this.each(function(){ var originalCheckBox = $(this), labels = []; //检查data-on和data-off属性 if(originalCheckBox.data('on')){ labels[0] = originalCheckBox.data('on'); labels[1] = originalCheckBox.data('off'); } else { labels = options.labels; } //创建新的checkbox的html结构 var checkBox = $('<span>',{ class: 'tzCheckBox ' + (this.checked ? 'checked' : ''),//此处'tzCheckBox '需要加一个空格,不然会和checked连在一起 html: '<span class="tzCBContent">' + labels[this.checked ? 0 : 1] + '</span><span class="tzCBPart"></span>' }); //插入自定义的checkbox,并隐藏默认的Checkbox checkBox.insertAfter(originalCheckBox.hide()); checkBox.click(function(){ checkBox.toggleClass('checked'); var isChecked = checkBox.hasClass('checked'); //同步原复选框 originalCheckBox.attr('checked',isChecked); checkBox.find('.tzCBContent').html(labels[isChecked ? 0 : 1]); }); //监听改变原checkbox并同步新checkbox效果 originalCheckBox.bind('change',function(){ checkBox.click(); }); }); } })(jQuery);
上面是今天的主要部分,没有这个插件我们的自定义checkbox就无法正常的工作。你可以将上面的代码单独的放在一个文件中,也可以放在你需要使用的页面中,我个人建议单独的使用一个文件,方便管理,就如此例,我将其命名jquery.tzCheckbox.js。
在正式使用之前,我们需要将jquery版本库,和上面创建的插件一起调入到你的项目中
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.tzCheckbox.js"<</script>
而且使用插件也是非常的容易的,只要在你需要使用的页面,并且你想自定义的checkbox上使用下面的一段jQuey代码:
<script type="text/javascript"> $(document).ready(function(){ $('input[type=checkbox]').tzCheckbox({ labels:['Enable','Disable'] }); }); </script>
只要你选择了checkbox就会将“Enable”和“Disable”传递给“tzCheckbox”插件,用来代替默认文本。你也可以根据你自己的需要设置你想要的文本内容。这样我们的复选框自定义美化效果就完成了。如下面的DEMO所示。
当然大家可以根据自己的需求,改变样式风格。如果你对这种方法还有不清楚的地方,你可以直接点击Martin Angelov写的《Better Check Boxes with jQuery and CSS》,你也可以点击 这里下载源码自己学习。最后再次感谢Martin Angelov给我们带来这么好的教程《Better Check Boxes with jQuery and CSS》。
如需转载烦请注明出处:W3CPLUS
Women's Singlets - Stussy, ?tzi, Champion, Nike, Adidas & More!