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调用指南。
申明调用的语法与格式,并提供各类参数的作用和变量的入值规范等。
当前还没有观点发布,欢迎您留下足迹!
在前端页面中文字超出隐藏并添加省略号是比较常见的样式处理,实际CSS样式中单行省略和多行省略的样式有所差异,在某些特殊场景下多行超出的样式会不生效,本文给出相关解决方案
使用背景色渐变可以使得页面质感得到大幅度提升,CSS样式中通过gradients属性指定两个或多个颜色之间平滑过渡,由于颜色的渐变是由浏览器生成,因此不会出现不同分辨率下失真的情况。
对于很多二栏布局的网站而言,正文部分过长时,侧边栏区域下拉过程中出现大片空白,因此我们可以实现当屏幕下滑达到指定元素位置(如即将越过)后对元素固顶来解决侧边栏区域的空旷感
Vue3 中所提供组合 API、ref、reactive、provide、inject几大特性,可以支持完成全局状态管理能力,Vuex 是为 Vue 单独提供的状态管理插件,相对比较笨重,如果项目简单可以尝试替代
绝大多数网站都会有个顶部导航,对于手机端而言为了便于访问导航常常会做固顶操作,通过CSS样式配合Jquery的scroll()方法或原生JS监听滑动事件方法,可以轻松实现下滑隐藏,上滑显示的效果
智能移动终端大爆发的现阶段,手机访问网页已经成为人们不可或缺的使用习惯,开发自适应网页大势所趋,实际上无论改造还是开发本身并不复杂,但是掌握更好的开发模式会使得你编写页面更加高效快捷