bind() 最简单的用法是绑定一个函数,使这个函数不论怎么调用都有同样的this值。
在JavaScript中,call、apply和bind是Function对象自带的三个方法
这三个方法的主要作用是改变函数中的this指向
//公共校验器创建实例
CheckFactory.addCheck([{
id: "输入框ID",
required: true,
//快捷规则:必填
integer: true,
//快捷规则:数字
regexCheck: '^((\+86)|0)?(\d+)$',
//正则规则
//用来展示标红、错误提示tips等
perID: "输入框外包裹元素ID"
},
// 示例
{
id: "userName",
required: true,
//快捷规则:必填
perID: "userNameDiv"
}]);
校验工厂文件需要独立建立一个JS文件。
一般在最顶层进行引用,以保证所有的页面都能够正常调用。
//校验工厂类,单独建立一个JS文件
CheckFactory = function() {
//逐一创建校验器
function addCheckListEvent(objList) {
//循环创建实例中的集合
for (var arg in objList) {
//(funtion(){})();匿名函数,立即执行函数;相当于先申明一个函数,声明完后直接调用;
(function(i) {
//接受调用规则集、
//校验元素ID
var checkId = objList[i].id;
//外围元素
var divId = objList[i].perID;
//必填
var requiredPram = objList[i].required;
//数字
var integerPram = objList[i].integer;
//正则
var regexPram = objList[i].regexCheck;
//......可以拓展更多规则,如E-mail、Limit等
//bind绑定生成对应的校验规则,选中和输入时均会激活校验器
$(document.getElementById(checkId)).bind("keyup blur",
function() {
var perOuterDiv = $(document.getElementById(divId));
var isRequired = true;
var isInteger = true;
var isRegexCheck = true
//......可以拓展更多规则
//必填项,接受入参true或false
if (requiredPram) {
isRequired = requiredCheck(checkId);
}
//纯数字校验
if (integerPram) {
isNumber = integerCheck(checkId);
}
//正则
if (regexPram !== null || regexPram !== undefined || regexPram !== '') {
isRegexCheck = regexCheck(checkId, regexPram);
}
//检查校验结果
//以必填为例...该内容定义进行自定义
if (isRequired) {
//清除异常样式,红框
perOuterDiv.removeClass("invalid");
perOuterDiv.attr("checkResult", 0);
} else {
perOuterDiv.addClass("invalid");
perOuterDiv.attr("checkResult", 1);
return;
}
//其他检查同理...略
});
})(arg);
}
}
//必填检查
function requiredCheck(checkId) {
var value = document.getElementById(checkId).val().trim();
//输入内容长度需要根据语言进行判断
if (getLengthForStr(value) < 1) {
return false;
}
return true;
}
//数字校验
function integerCheck(checkId) {
var rule = /^[0-9]+$/gi;
var intergerVal = document.getElementById(checkId).val();
if (intergerVal != "" && !rule.test(intergerVal)) {
return false;
}
return true;
}
//正则校验
function regexCheck(checkId, regexPram) {
var inputValue = document.getElementById(checkId).val();
var rule = regexPram;
var re = new RegExp(rule);
if (inputValue != "" && !re.test(inputValue)) {
return false;
}
return true;
}
//检查长度 长度转换
function getLengthForStr(value) {
//长度为1的字符串
var oneChar = /[x00-xff]/gi;
//长度为2的字符串
var twoChar = /[u0080-u07FF]/gi;
//长度为3的字符串
var triChar = /[u0800-uFFFF]/gi;
var regRN = /x0a/g;
var textLength = 0;
if (oneChar.test(value)) {
textLength += value.match(oneChar).length;
if (regRN.test(value)) {
textLength += value.match(regRN).length;
}
}
if (twoChar.test(value) && !/i/gi.test(value)) {
textLength += value.match(twoChar).length * 2;
}
if (triChar.test(value)) {
textLength += value.match(triChar).length * 3;
}
return textLength;
}
return {
addCheck: function(jsonArray) {
var jsonStr = JSON.stringify(jsonArray);
var objList = jsonArray;
//逐一创建校验器
addCheckListEvent(objList);
}
};
} ();
以上是公共校验方法的大体框架。
在实际应用中应当多处增加非空判断,以保证方法的正常运行。
可以不断拓展更多便捷的校验规则。
如常用的E-Mail、身份证号、生日等等,使校验工厂获得更丰富的校验能力。
特别针对调用实例书写格式异常的情况,因此建议对外提供一个标准API调用指南。
申明调用的语法与格式,并提供各类参数的作用和变量的入值规范等。
当前还没有观点发布,欢迎您留下足迹!
HTML 中加载 SVG 有很多种方式,但如果需要在 HTML 中通过 CSS 样式自由控制 SVG 样式就必须将 svg 标签插入网页找那个成为 DOM 的一部分,本文借助 SVGInject 插件可以快速完成这一操作
多数网站首页的数据往往是最庞大的,三到五秒打开都算比较优秀,因此设置一个开场(预加载)动画特效能够大幅度提升用户感官体验,这里分享本站使用的加载动画,整体比较简约清新
Vuex 是一个专为 Vue 应用程序开发的状态管理模式,通过集中式存储应用所有组件的状态,依照规则确保状态可以进行标准方式变化,比较适合应用在公共基础数据存放,如:用户信息
instantclick.js利用预加载技术使得网站页面跳转时的速度得到大大提升,通过预加载数据替换当前的DOM结构体来达到减少页面请求返回的数据量,提供事件监听钩子函数便于完成页面初始化
在业务中我们会出现不同的项目依赖与不同版本的 node.js,总不能每次跑项目的时候都去重新安装对应版本的 node.js 和依赖,使用 nvm 可以让多个版本的 node.js 共存,并提供管理和切换
Vue3 中所提供组合 API、ref、reactive、provide、inject几大特性,可以支持完成全局状态管理能力,Vuex 是为 Vue 单独提供的状态管理插件,相对比较笨重,如果项目简单可以尝试替代