自定义表单——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》。

时间: 2024-08-11 11:44:05

自定义表单——jQuery制作个性化Checkbox的相关文章

dede自定义表单制作

dede自定义表单制作和制作留言板的原理差不多,就是如果有自己制作了一个网页专题的话需要接受前台提交来的表单,可以参照这种的! 首页在后台-核心-频道模型-自定义表单-增加新的自定义表单 里添加一个表单! 接下来就是填写自定义表单的各项值了,其实这里不懂的话都默认就好,只是自定义表单的名字作为记号写个差不多的,然后就是公开与否,如果前台提交来的数据不想让别人看到就可以直接选不公开!当然这个不公开最好是最后制作完毕在选,因为接下来要在前台浏览并复制一些代码,如果不公开是不能在前台看的! 填写好确定

jquery.validate.js使用之自定义表单验证规则

jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 http://www.51xuediannao.com/js/jquery/jquery_validate/ ======================================================== //扩展验证规则 //邮箱 表单验证规则jQuery.validator.

activiti自定义流程之自定义表单(二):创建表单

注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进行修改. 由于自己的前端相关技术太渣,因此好多东西都不会用,导致修改实现的过程也是破费了一番功夫,头皮发麻了好几天. 既然是用别人的插件进行修改,那么我想如果只是单独的贴出我修改后的代码,可能没有前后进行对比好理解,因此这里就把原代码和修改后的同时对比着贴出,以便于朋友们能从对比中更快的得到启发.

struts2 自定义表单

自定义表单一定会涉及<s:iterator/>迭代,一个复杂的自定义表单可能会嵌套n多层迭代. 比如一个自定义一个问卷调查页面涉及3个模型:一个Survey代表一个调查,一个Page代表一个页面,一个Question代表一个问题.每个问题中会包含不同的表单元素,就会涉及迭代. 3个模型类如下: Survey package com.atguigu.surveypark.model; import java.util.Date; import java.util.HashSet; import

activiti自定义流程之整合(三):整合自定义表单创建模型

本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单列表展示相关的内容,这里也就直接进入到下一个步骤,创建流程模型了. 在之前的创建流程模型一节里,我讲代码比较多,实际上在这里还有很重要的一个环节没有细说,那就是自定义流程图,画流程图的过程也是有不少需要注意的事项的,在这一节我会适当的以截图加解释进行说明. 而在创建流程模型的过程中,因为之前也是用j

织梦自定义表单通过ajax提交的实现方法

自定义表单通过ajax判断,提交不用跳转页面,提高用户体验.具体方法如下: html表单代码部分,就提交按钮改成botton,,添加onclick事件 表单代码: <form action="javascript:;" enctype="multipart/form-data" method="post"> <input type="hidden" name="action" value=

JEECG 3.6 自定义表单版本发布,智能快速开发平台

JEECG 3.6(智能快速开发平台) 自定义表单版本发布 平台介绍:JEECG(J2EE Code Generation),一款基于代码生成器的JAVA快速开发平台,集成强大代码生成器和在线开发机制,在线报表配置机制,自定义表单,数据权限等企业平台机制.---------------------------------------- Version:  jeecg-framework-3.6版 本:   JEECG 智能快速开发平台Date:      2015-12-04作 者:      

织梦dedecms网站给自定义表单加dede模板自带验证码的方法。

有时候,我们因为需要给dede网站的自定义表单添加验证码,防止恶意填写表单提交. 我们可以用以下的方法来实现: 首先,我们要找到 /plus/diy.php 这个文件 在头部引入文件: require_once(DEDEINC.'/membermodel.cls.php'); 然后找到 elseif($do == 2) {  在这个地方加入代码块 //验证码验证 $svali = GetCkVdValue(); if(preg_match("/1/",$safe_gdopen)){ i

Django初体验(一):自定义表单提交

注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义表单.对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误"CSRF verification failed. Request aborted." 本篇博客只要针对"表单提交"和"Ajax提交"两种方式来解决CSRF带来的错误 一.表单提交 Template: <!DOCTYPE html> <html