/**
* Created by Administrator on 2015/4/2.
* 时间:2012-6-6
作用:一对form标签下有多个(包括一个)表单需要提交时,提交当前作用域中的表单项做出相应的验证
处理问题:一个aspx页面下只能有一个form表单(加了runat='server')
约定:当前body元素下可以有多个form表单:凡是class='form'的元素都视为一个表单元素,此“表单”元素下有相应的表单项
其中包含一个含有class='check'的按钮,当点击此按钮的时候会首先验证表单项中含有class='notnull'的表单项,其次验证表单项中含有regex='/^$/'的
表单项,如果验证失败,会抛出相应的有好提示nullmsg='不能为空' 或 logicmsg='只能是数字'。
每个表单项验证成功之后class='check'的按钮会触发一个名为 $.GlobalCallBack.submitCallback的回调函数。继而完成和后端的交互。 用法:
calss='notnull' 元素不能为空、勾选(复选框)
class='select' 必选(下拉框)
class='nullmsg' 验证失败之后的友好提示
regex='/^$/' 当前需要验证的正则
logicmsg='邮箱格式错误' 当前正则验证失败之后的友好提示
配置了指定的errorElement(错误提示元素),就会在页面上给出友好提示 Global.submitCallback button回调函数
Global.confirmCallback confirm回调函数;
需要改进的地方:

24 作者:layen.Xu
*/
;
(function ($) {
$.GlobalCallBack = {
//用于.check按钮的回调
submitCallback: null,
//用于.confirm按钮的回调
confirmCallback: null
};
$.fn.Action = function (options) {
var defaults = {
body: 'body',
formElement: '.form',
errorElement: null
}
var opts = $.extend({}, defaults, options);
var operating = {
///e:当前事件参数 form:当前“表单” _Enter:是否点击了回车键
main: function (e, form, _Enter) {
var button = null;
var action = this;
try {
button = e.srcElement == null ? document.activeElement : e.srcElement;
} catch (e) {
console.log(e.message)
button = document.activeElement;
}
if ($(button).is(".check") || _Enter) {
//alert("提交")
var sub = (action.checkform(form) && action.CheckInputRex(form) && action.checkselect(form) && action.checkChecked(form));
if (sub) {
// Call our callback, but using our own instance as the context
//GlobalCallBack.submitCallback.call(form, [e]);
$.GlobalCallBack.submitCallback.call(form, e);
} else
return sub;
} else if ($(button).is(".confirm")) {
//alert("删除")
var sub = confirm($(button).attr("title"));
if (sub) {
//GlobalCallBack.confirmCallback.call(form, [e]);
$.GlobalCallBack.confirmCallback.call(form, e);
} else
return sub;
} else {
// //alert("其它")
return true;
}
},
///检测表单为空项 form当前表单
checkform: function (form) {
var b = true;
var action = this;
$(form).find(".notnull").each(function () {
if ($.trim($(this).val()).length <= 0 || $.trim($(this).val()) == $.trim($(this).attr("placeholder"))) {//|| $(this).val() == this.defaultValue
return b = action.tip(this, 'nullmsg');
}
});
if (b == true) {
$(form).find(opts.errorElement).text("");
$(form).find(opts.errorElement).hide();
}
return b;
},
//检测表单中必选的下拉列表 form当前表单
checkselect: function (form) {
var b = true;
var action = this;
$(form).find(".select").each(function (i) {
var ck = $(this).find('option:selected').text();
if (ck.indexOf("选择") > -1) {
return b = action.tip(this, 'nullmsg');
}
});
if (b == true) {
$(form).find(opts.errorElement).text("");
$(form).find(opts.errorElement).hide();
}
return b;
},
//检测表单中必选的复选框 form当前表单
checkChecked: function (form) {
var b = true;
            var action = this;
$(form).find(".checkboxReq").each(function (i) {
var ck = $(this)[0].checked;
if (!ck) {
return b = action.tip(this, 'nullmsg');
}
});
if (b == true) {
$(form).find(opts.errorElement).text("");
$(form).find(opts.errorElement).hide();
}
return b;
},
//检查是否匹配该正则表达式 value:输入的值 reg:正则 ele:当前项
GetFlase: function (value, reg, ele) {
var action = this;
if (reg.test(value)) {
return true;
}
return action.tip(ele, 'logicmsg');
},
//检查正则 form当前表单
CheckInputRex: function (form) {
var action = this;
var b = true;
$(form).find("input[type='text'],input[type='password']").each(function () {
console.log($(this).attr("regex"))
if (typeof ($(this).attr("regex")) == 'string') {
if ($.trim($(this).val()).length > 0 && $.trim($(this).val()) != $.trim($(this).attr("placeholder"))) {
//当前表单的值
var value = $(this).attr("value") || $(this).val();
var regx = eval($(this).attr("regex"));
return b = action.GetFlase(value, regx, this);
}
}
});
return b;
},
//提示
tip: function (ele, attr) {
if (opts.errorElement) {
$(ele).parents(opts.formElement).find(".error").text($(ele).attr(attr));
$(ele).parents(opts.formElement).find(".error").show();
} else {
alert($(ele).attr(attr));
}
$(ele).select();
$(ele).focus();
return false;
}
};
return $(opts.body).find(opts.formElement).each(function () {
var form = this;
this.onclick = function (e) {
return operating.main(e, form);
}
if($(opts.formElement).length==1){
document.onkeydown = function (eve) {
var e = eve || window.event || arguments.callee.caller.arguments[0];
if (e && e.keyCode == 13) {
return operating.main(e, form, true);
}
}
} });
}
}(jQuery));

HTML代码

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="http://www.ac.shell.com/static/js/vendor/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="red.js"></script>
<script type="text/javascript">
$(function(){
$(document).Action({errorElement:'.error'});
}); $.GlobalCallBack.submitCallback = function (e) {
e = e || window.event;
var obj = e.srcElement ? e.srcElement : e.target;
alert(obj.id)
} </script>
</head>
<body>
<div class="form">
数字:<input type="text" regex="/^\d+$/" logicmsg="只能输入数字" class="notnull" nullmsg="不能为空"/><br/>
<input type="button" class="check" id="btnClick" value="Click Me"/>
<div class="error">
</div>
</div>
<br/><br/> <div class="form">
选择:<select name="select" class="select" nullmsg="请选择" id="select">
<option value="0">请选择</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<br/><br/>
<input type="button" class="check" id="btnSelect" value="Click Me2"/> <div class="error">
</div>
</div>
</body>
</html>

javascript--自己用的插件的更多相关文章

  1. 【精心推荐】几款极好的 JavaScript 文件上传插件

    文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...

  2. 用Javascript编写Chrome浏览器插件

    原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...

  3. javascript跟随滚动效果插件代码(javascript Follow Plugin)

    这篇文章介绍了javascript跟随滚动效果插件代码(javascript Follow Plugin),有需要的朋友可以参考一下Js 跟随滚动效果插件支持定义多个跟随ID,采用css fixed属 ...

  4. 第一百三十八节,JavaScript,封装库--插件

    JavaScript,封装库--插件 库主要是用来封装一般JavaScript的常规操作代码,而拖拽这种特效代码属于功能性代码,并不是必须的,所以这种类型的代码,我们建议另外封装,在需要的时候作为插件 ...

  5. 10个强大的Javascript表单验证插件推荐

    创建一个JavaScript表单验证插件,可以说是一个繁琐的过程,涉及到初期设计.开发与测试等等环节.实际上一个优秀的程序员不仅是技术高手,也应该是善假于外物的.本文介绍了10个不错的JavaScri ...

  6. 几款极好的 JavaScript 文件上传插件

    文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...

  7. 推荐12款实用的 JavaScript 书页翻转效果插件

    Flipbooks(书页)或者页面翻转已成为在网页设计中最流行的交互动画之一.他们可以用在 Flash,网页或者在线杂志中.使用书页动画或者页面翻转的网页设计效果方便人们展示他们的产品,作品或者其它内 ...

  8. 14个华丽的javascript图表资源和插件

    最近我分享一许多css/jquery 有用的资源,这里我将介绍一些用于构建华丽图表的javascript资源和插件,图表是展示数据最有效的方式. 建立一张图表有很多不同的方法,比如falsh.java ...

  9. 10个精选的颜色选择器Javascript脚本及其jQuery插件

     Color picker即颜色选择器使我们在web开发中可能经常用到的组件,今天我们特意精选了10个超酷的颜色选择器实现,其中包括了javascript脚本 实现及其传说中的jQuery插件实现 ...

  10. 阿里云oss视频上传不能在线播放,js,javascript,在线播放器,插件

    网页视频播放插件 发现阿里云oss储存,上传了视频不能在线播放. 解决方法:使用插件播放即可解决. <html> <head> <meta charset="u ...

随机推荐

  1. Linux下高效编写Shell——shell特殊字符汇总

    Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好 ...

  2. (转载)浅谈javascript的分号

    (转载)http://www.blueidea.com/tech/web/2009/7261.asp javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它 ...

  3. 折腾iPhone的生活——iOS设备重刷固件

    iOS设备升级系统总共有这么几种方法: 1.OTA升级,也就是我们最常碰到的,在设备上,连上Wifi,在设置里面的软件更新就可以直接通过Wifi安装新的系统(已越狱设备不要这样升级) 2.通过iTun ...

  4. nyoj 102 次方求模【快速幂】

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  5. Debug调试

    1.F5单步调试进入函数内部 2.F6单步调试进行下一步 3.F7由函数内部返回到调用用处 4.F8一直执行到下一个断点

  6. sql宽字节注入,绕过单引号

    参加下面: http://leapar.lofter.com/post/122a03_3028a9 http://huaidan.org/archives/2268.html https://ilia ...

  7. bzoj2132: 圈地计划

    要分成两坨对吧.. 所以显然最小割 但是不兹辞啊.. 最小割是最小的啊 求最大费用怎么玩啊 那咱们就把所有费用都加起来,减掉一个最小的呗 但是两个属于不同集合的点贡献的价值是负的啊 网络流怎么跑负的啊 ...

  8. 全栈project师?给把瑞士军刀你去砍鬼子好不好!?

    来自www.techgogogo.com 编者注:本文来自Medium前三名推荐文章,发文时已经获得高达2,125个推荐,中文版由天地会珠海分舵编译.全文对当今风靡业界的"全栈xx师&quo ...

  9. phpmailer邮件类下载(转)

    PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址*.支持多种邮件编码包括:8bit,base64,binary和qu ...

  10. Change Fragment layout on orientation change

    Warning: this may be a pre-Lollipop answer. A Fragment doesn't get re-inflated on configuration chan ...