巧用 Bootstrap的 popover插件 实现表单校验提示

最近的项目,用Bootstrap比较多。浏览Bootstrap文档,发现 popover 插件特别适合做表单校验出错的提示。

因为使的非常频繁,最近把它封住下,做成 jQuery的插件。 通过 本插件,在 html标签中 定义好 data-vaild=”校验正则” data-errmsg=”错误信息即可”。为什么 要把 校验规则 写到 html 标签中呢?因为 我还用它做了 后台 的校验规则(后台没用Node,现在用的ASP,忙完专门再发文写下原理)。演示地址:http://www.miaoqiyuan.cn/products/vaild/index.html

<input class="form-control" id="u_exam_idnumber" name="u_exam_idnumber" placeholder="请输入中考准考证号" data-vaild="^\d{5,20}$" data-errmsg="准考证号码不正确,仅能包含数字" 

最终实现的效果如下:

vaild

插件代码如下:

"use strict";
/*
	jQuery+Bootstrap 校验表单 by Miaoqiyuan.cn
	原理:http://www.miaoqiyuan.cn/p/jquery-bootstrap-vaild
	演示:http://www.miaoqiyuan.cn/products/vaild/index.html
	源码:http://www.miaoqiyuan.cn/products/vaild/jQuery.Vaild.js
*/
(function(jQuery){
	$.extend({
		Vaild : function(_this){
			if( !!$(_this).data("vaild") ){
				var pattern = new RegExp($(_this).data("vaild"));
				if( pattern.test( $(_this).val() ) ){
					$(_this).parent().removeClass("has-error").addClass("has-success");
					$(_this).popover("destroy");
				}else{
					$(_this).parent().addClass("has-error").removeClass("has-success");
					$(_this).data("toogle", "top").data("placement", "top").data("container", "body").data("content", $(_this).data("errmsg")).popover({"trigger":"manual"}).popover("show");
					return false;
				}
			}else{
				$(_this).parent().addClass("has-success");
			}
			return true;
		}
	});
	$.fn.extend({
		Vaild : function(){
			$(this).each(function(index, _this){
			  	$(_this).submit(function(){
			  		var checkResult = true;
			  		for(var i = 0 ; i < _this.length; i++ ){
			  			checkResult = $.Vaild(_this[i]) && checkResult;
			  		}
			  		return checkResult;
			  	});
			  	for(var i = 0 ; i < _this.length; i++ ){
			  		$(_this[i]).blur(function(){
			  			$.Vaild(this);
			  		});
			  	}
			});
		}
	});
})(jQuery);

调用的时候非常简单,直接使用以下代码:

<script>
$("form").Vaild();
</script>

当表单失去焦点时,如果不合法,会直接提示错误。点击提交时,如果有表单项目不合法,会阻止表单继续提交。

popoover默认的背景是 白色的,不能起到 警示作用,而且 padding 设置过大,太占用空间了。 最后调整下CSS,就实现了 截图的效果。


/*重构 popover */
.popover{background:#C00;color:#FFF;}
.popover .popover-content{padding:1px 5px;}
.popover.top>.arrow:after{border-top-color:#C00;}

/*重构 bootstrap 默认错误提示 */
.has-error input,
.has-error textarea,
.has-error select{background-color:#F2DEDE;}
.has-success input,
.has-success textarea,
.has-success select{background-color:#DFF0D8}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据