您的位置:

首页 >

网络编程 >

关于jquery中全局函数each使用介绍 >

关于jquery中全局函数each使用介绍

2016-12-04 07:25:27

分类:网络编程

jquery 包含了两个each一个是 $().each 另一个是 $.each 区别就在于前一个是jquery对象的内置函数 而后一个 这是对象的遍历函数 一般用于ajax中获取不同的对象数据进行遍历以json为例 jquery 的getJSON 快捷方法可以便利的取得 指定url中的json文件 jquery 会内置的调用 js原生 的eval函数来解析json文本 转换成一个 js对象 然后通过each全局函数 进行遍历 以取得其中的值  语法 each(data,[params],function(当前项索引,当前项)) 这也是与 内置函数each的一个极大的不同, 内置函数中的 index 是一个标识符 用来表示 从什么位置开始遍历,后面是 element 元素 指定遍历多少个 element 而全局函数中的 each 重的index 是指 json中每个键值对 中的键 也就是KEY! 再jquery 基础教程一书中 作者举例写了相应的代码 但是没有能够将 参数正确示例 其示例代码如下$.each(data,function(entryIndex,entry){ var html = entry['term']}); 看过此书的朋友一定很疑惑 关于 entryIndex 到底是啥? 其实 entryIndex 就是 'term' 只不过作者没有用索引代入 而是直接从json中将键值填入了,通过 调试才发现 如下问题 普遍翻译为索引,个人意见  还是应该 以键来称呼 entry 就是一个包含了键值对的属性 值是一个字段 当这个属性通过 键作为索引导入 读出相应的 值通过 类似get访问器的方式返回,

首先要知道DOM的两级模式:DOM0级和DOM2级 在DOM0级事件处理程序是通过把函数实例的引用指派到DOM元素的属性而声明的。 声明DOM第0级事件处理程序 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>DOM Level 0 Events Example</title> <script type="text/javascript" src="../scripts/jquery-1.2.1.js"> </script> <script type="text/javascript"> $(function(){ $('#vstar')[0].onmouseover = function(event) { say('Whee!'); } }); function say(text) { $('#console').append('<div>'+new Date()+' '+text+'</div>'); } </script> </head> <body> <img id="vstar" src="vstar.jpg" onclick="say('Vroom vroom!')"/> <div id="console"></div> </body> </html> 事件冒泡:在目标元素获得机会处理事件之后,事件模型检查目标元素的父元素,看是否为同类型事件建立了处理程序。如果是,则也调用父元素的处理程序。再检查其父元素,直至检查到DOM树的顶部,这个过程称之为事件冒泡。 事件传播从起点到DOM树的顶部 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html id="greatgreatgrandpa"> <head> <title>DOM Level 0 Bubbling Example</title> <script type="text/javascript" src="../scripts/jquery-1.2.1.js"> </script> <script type="text/javascript"> $(function(){ $('*').each(function(){ var current = this; this.onclick = function(event) { if (!event) event = window.event; var target = (event.target) ? event.target : event.srcElement; say('For ' + current.tagName + '#'+ current.id + ' target is ' + target.id); } }); }); function say(text) { $('#console').append('<div>'+text+'</div>'); } </script> </head> <body id="greatgrandpa"> <div id="grandpa"> <div id="pops"> <img id="vstar" src="vstar.jpg"/> </div> </div> <div id="console"></div> </body> </html> DOM第2级事件模型 DOM第0级的缺点是,属性被用于存储作为事件处理程序的函数的引用,所以每个元素对于任何特定的事件类型,每次只能注册一个事件处理程序。 DOM第2级事件模型(也称为监听器)被设计来解决这些类型的问题。每个DOM元素都定义名为addEventListener()的方法,用于把事件处理程序(监听器)附加到元素上。这个方法的格式如下所示: addEventListener(enentType,listener,useCapture) 参数eventType是一个字符串,用于标识将要处理的时间类型。例如:click、mouseover、keydown等。 参数listener是函数的引用(或内联函数),用于在元素上建立指定类型的处理程序。 参数useCapture是布尔类型。 利用DOM第2级模型建立事件处理程序 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>DOM Level 2 Events Example</title> <script type="text/javascript" src="../scripts/jquery-1.2.1.js"> </script> <script type="text/javascript"> $(function(){ var element = $('#vstar')[0]; element.addEventListener('click',function(event) { say('Whee once!'); },false); element.addEventListener('click',function(event) { say('Whee twice!'); },false); element.addEventListener('click',function(event) { say('Whee three times!'); },

相信大家看代码后再添加一些针对其他格式的验证也不是太麻烦的事情 对于各种提示效果需要修改 feedback 方法就可以实现,因为不想让代码变得太臃肿,所以有很多不常用的功能就没有再添加了 主要目的提供大家参考与分享,也希望能够根据大家的意见使其变得更加完善 番茄的表单验证类_脚本之家 //去除字符串两边的空格 String.prototype.trim = function () { return this.replace(/(^\s+)|(\s+$)/g, ""); } //检测字符串是否为空 String.prototype.isEmpty = function () { return !(/.?[^\s ]+/.test(this)); } //检测值是否介于某两个指定的值之间 String.prototype.isBetween = function (val, min, max) { return isNaN(val) == false && val >= min && val <= max; } //获取最大值或最小值 String.prototype.getBetweenVal = function (what) { var val = this.split(','); var min = val[0]; var max = val[1] == null ? val[0] : val[1]; if (parseInt(min) > parseInt(max)) { min = max; max = val[0]; } return what == 'min' ? (isNaN(min) ? null : min) : (isNaN(max) ? null : max); } var validator = function (formObj) { this.allTags = formObj.getElementsByTagName('*'); //字符串验证正则表达式 this.reg = new Object(); this.reg.english = /^[a-zA-Z0-9_\-]+$/; this.reg.chinese = /^[\u0391-\uFFE5]+$/; this.reg.number = /^[-\+]?\d+(\.\d+)?$/; this.reg.integer = /^[-\+]?\d+$/; this.reg.float = /^[-\+]?\d+(\.\d+)?$/; this.reg.date = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/; this.reg.email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; this.reg.url = /^(((ht|f)tp(s?))\:\/\/)[a-zA-Z0-9]+\.[a-zA-Z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/; this.reg.phone = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/; this.reg.mobile = /^((\(\d{2,3}\))|(\d{3}\-))?((13\d{9})|(159\d{8}))$/; this.reg.ip = /^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$/; this.reg.zipcode = /^[1-9]\d{5}$/; this.reg.qq = /^[1-9]\d{4,10}$/; this.reg.msn = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; this.reg.idcard = /(^\d{15}$)|(^\d{17}[0-9Xx]$)/; //错误输出信息 this.tip = new Object(); this.tip.unknow = '未找到的验证类型,无法执行验证。'; this.tip.paramError = '参数设置错误,无法执行验证。'; this.tip.required = '不允许为空。'; this.tip.english = '仅允许英文字符及下划线 (a-zA-Z0-9_)。'; this.tip.chinese = '仅允许中文字符。'; this.tip.number = '不是一个有效的数字。'; this.tip.integer = '不是一个有效的整数。'; this.tip.float = '不是一个有效的浮点数。'; this.tip.date = '不是一个有效的日期格式。 (例如:2007-06-29)'; this.tip.email = '不是一个有效的电子邮件格式。'; this.tip.url = '不是一个有效的超链接格式。'; this.tip.phone = '不是一个有效的电话号码。'; this.tip.mobile = '不是一个有效的手机号码。'; this.tip.ip = '不是一个有效的IP地址。'; this.tip.zipcode = '不是一个有效的邮政编码。'; this.tip.qq = '不是一个有效的QQ号码。'; this.tip.msn = '不是一个有效的MSN帐户。'; this.tip.idcard = '不是一个有效的身份证号码。'; //获取控件名称 this.getControlName = function () { return this.element.getAttribute('controlName') == null ? '指定控件的值' : this.element.getAttribute('controlName'); } //设定焦点 this.setFocus = function (ele) { try { ele.focus(); } catch (e){} } //设置边框颜色 this.setBorderColor = function (ele) { var borderColor = ele.currentStyle ? ele.currentStyle.borderColor : document.defaultView.getComputedStyle(ele, null)['borderColor']; ele.style.borderColor = '#ff9900'; ele.onkeyup = function () { this.style.borderColor = borderColor; } } //输出错误反馈信息 this.feedback = function (type) { try { var msg = eval('this.tip.' + type) == undefined ? type : this.getControlName() + eval('this.tip.' + type); } catch (e) { msg = type; } this.setBorderColor(this.element); alert(msg); this.setFocus(this.element); }; //执行字符串验证 this.validate = function () { var v = this.element.value; //验证是否允许非空 var required = this.element.getAttribute('required'); if (required != null && v.isEmpty()) { this.feedback('required'); return false; } //验证是否合法格式 var dataType = this.element.getAttribute('dataType'); if (!v.isEmpty() && dataType != null && dataType.toLowerCase() != 'password') { dataType = dataType.toLowerCase(); try { if (!(eval('this.reg.' + dataType)).test(v)) { this.feedback(dataType); return false; } } catch(e) { this.feedback('unknow'); return false; } } //执行数据验证 var confirm = this.element.getAttribute('confirm'); if (confirm != null) { try { var data = eval('formObj.' + confirm + '.value'); if (v != data) { alert('两次输入的内容不一致,请重新输入。'); this.setBorderColor(this.element); this.setFocus(this.element); return false; } } catch (e) { this.feedback('paramError'); return false; } } //验证数字大小 var dataBetween = this.element.getAttribute('dataBetween'); if (!v.isEmpty() && dataBetween != null) { var min = dataBetween.getBetweenVal('min'); var max = dataBetween.getBetweenVal('max'); if (min == null || max == null) { this.feedback('paramError'); return false; } if (!v.isBetween(v.trim(), min, max)) { this.feedback(this.getControlName() + '必须是介于 ' + min + '-' + max + ' 之间的数字。'); return false; } } //验证字符长度 var dataLength = this.element.getAttribute('dataLength'); if (!v.isEmpty() && dataLength != null) { var min = dataLength.getBetweenVal('min'); var max = dataLength.getBetweenVal('max'); if (min == null || max == null) { this.feedback('paramError'); return false; } if (!v.isBetween(v.trim().length, min, max)) { this.feedback(this.getControlName() + '必须是 ' + min + '-' + max + ' 个字符。'); return false; } } return true; }; //执行初始化操作 this.init = function () { for (var i=0; i<this.allTags.length; i++) { if (this.allTags[i].tagName.toUpperCase() == 'INPUT' || this.allTags[i].tagName.toUpperCase() == 'SELECT' || this.allTags[i].tagName.toUpperCase() == 'TEXTAREA') { this.element = allTags[i]; if (!this.validate()) return false; } } }; return this.init(); } 密码 password 密码确认 confirm 英文 english 4~10个字符 中文 chinese 非空 数字 number 大于10,小于100 整数 integer 浮点数 float 日期 date 邮件 email 网址 url 电话 phone 手机 mobile IP地址 ip 邮编 zipcode QQ号码 qq MSN msn 身份证 idcard [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]1.".3"这样也是算浮点数的 2.this.reg和this.tip可以用 this.reg = {englisth : /^[a-zA-Z0-9_\-]+$/, chinese : /^[\u0391-\uFFE5]+$/} 这种形式,省点代码 3.日期只验证格式没有验证合法性 btw:

搞网站开发,最头疼的是js问题,倒不是php程序开发,前端的页面,js真是太让人折腾了,特别是js,你根本不知道哪里就会出问题,各种兼容也要兼顾,不像写程序,你只关心功能如何实现,逻辑怎么写。js文件一个出问题,就影响其他js的运行,今天就遇到一个很纠结的东西,一个js导致的莫名其妙的问题。这个js是一个增强页面效果的功能,但是用了它,jquery在有的页面可以用,有的页面就失效了,用firefox的firebug调试,发现在有的页面会报错,获取分页的位置的地方会出错。后来发现确实只要没有分页的地方jquery就失效了,因为js它获取不到分页的位置。中间省略800字,调前端什么的最烦了,我又不是前端开发工程师,这些问题也本应由前端人员解决,但是做为php网站开发人员,能够尽力解决的也就自己解决吧。后来把确定出现问题的js文件放到底部,问题就解决了,真是莫名其妙!可能是有问题的地方放到最后,也就不会影响后面的js运行了,这是个经验。。你说我说的有没有道理!

在线演示 大家还记得我们曾经介绍过的表单验证jquery插件jquery.validationEngine吧,使用这个插件你不需要写任何一行js代码就可以生成一个功能强大的表单验证功能。是不是超棒? 今天介绍的Parsley同样也可以帮助你只使用简单的配置即可实现表单验证功能,基于它的强大DOM-API。 主要特性 •基于超棒的用户体验 •超级方便配置 •超轻量级(压缩后12K),支持jQuery和Zepto •超简单,只需要简单配置DOM-API,类似jQuery的data API •绝对免费 •可靠性非常好 内建的验证 •required:要求输入 •Not blank:不能为空 •Min length:最小长度 •Max length:最大长度 •Range length:长度区间 •Min:最小值 •Max:最大值 •Range:区域值 •RegExp:正则表达式 •Equal To:等于 •Min check:检查选择的checkbox的最少数量 •Max check:检查选择的checkbox的最多数量 •Range check:检查选择的checkbox的区间数量 •Remote:ajax验证 使用和配置Parsley.js非常的简单,你只需要使用HTML的data属性来配置html即可,如下: 复制代码 代码如下: <form id="demo-form" data-validate="parsley"> <label for="fullname">Full Name * :</label> <input type="text" id="fullname" name="fullname" data-required="true" /> <label for="email">Email * :</label> <input type="text" id="email" name="email" data-trigger="change" data-required="true" data-type="email" /> <label for="website">Website :</label> <input type="text" id="website" name="website" data-trigger="change" data-type="url" /> <label for="message">Message (20 chars min, 200 max) :</label> <textarea id="message" name="message" data-trigger="keyup" data-rangelength="[20,200]"></textarea> </form> 是不是很方便,并且文档非常的完整,不过如果你需要使用中文,需要自己本地化一下,相信如果使用过的朋友一定会喜欢的!

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 5060网址大全 网站地图

联系我们

827570882

扫描二维码分享到微信