focus、blur事件的事件委托处理(兼容各个流浏览器)

  今天工作中遇到个问题,问题是这样的,一个form表单中有比较多的input标签,因为form中的input标签中的值都需要前端做客户端校验,由于本人比较懒而且特不喜欢用循环给

每个input元素添加blur事件处理,感觉这样有损专业前端形象!想过用事件委托,然而focus、blur事件利用冒泡机制搞事件委托行不通啊,父级元素不支持focus、blur咋办????

由此引发了对此问题的思考,人生就是这样,总觉得自己NB的不行,感觉自己什么都会,然而你在没遇到boss的时候打着小怪一直都会觉得自己天下无敌,遇到了才发现自己其实不会

的东西还有很多...不过这也是好事,因为自己在遇到问题之后才会放下自以为是,才会不断的去学习,不断的成长!

  好了进入正题,既然遇到问题了就得想办法解决经过寻师访友终于找到了解决的办法,在此记录下来以防自己以后忘记,记笔记也能加深自己对问题的记忆和理解。

 1 PXJSFrame.readyEvent(function(){
 2     var _e = PXJSFrame.Event,_dom = PXJSFrame.DOM;
 3     var wrap = _dom.getById(‘container‘);
 4     if(_e.isIE){
 5         /*
 6         对于低版本的IE浏览器因为他们不支持事件捕获,而他们支持focusin、focusout事件
 7         使用该事件加事件委托能解决低版本IE的focus、blur事件委托的问题
 8          */
 9         _e.addEvent(wrap,‘focusout‘,handler);
10     }else{
11         /*
12             高版本的IE浏览器以及主流标准浏览器则可以利用事件捕获机制来解决
13          */
14         _e.addEvent(wrap,‘blur‘,handler,true);
15     }
16     function handler(event){
17         var tar = _e.getTarget(event);
18         if(tar.nodeName.toLowerCase()==‘input‘){
19             if(!tar.value){
20                 var txt = _dom.getText(_dom.prevEle(tar)[0]);
21                 txt = txt.substr(0,txt.length-1);
22                 tar.focus();
23                 alert(txt+‘不能为空!‘);
24             }
25         }
26     }
27 });

HTML代码如下:

 1 <body>
 2 <div id="container">
 3     <ul>
 4         <li><label>用&nbsp;户&nbsp;名:</label><input type="text" /></li>
 5         <li><label>密&nbsp;&nbsp;码:</label><input type="password" /></li>
 6         <li><label>确认密码:</label><input type="password" /></li>
 7         <li><label>验&nbsp;证&nbsp;码:</label><input type="text" /></li>
 8     </ul>
 9 </div>
10 </body>

经过在ie6、ie11、chrome、firefox等浏览器的测试完全达到了预期的效果,这样处理之后心里果然舒服多了哈哈哈哈,在此分享出来供烦恼于此的小伙伴们一起享用!

时间: 2024-10-10 05:51:42

focus、blur事件的事件委托处理(兼容各个流浏览器)的相关文章

form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器。

在处理表单提交的时候遇到一个问题,通常用<input type="submit" value="提交" />按钮来提交form,再监听form的onsubmit事件就能在前端处理表单验证的事情. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document<

事件和事件处理程序

事件:用户或浏览器自身执行的某种动作.诸如:click.load.mouseover等. 事件处理程序(事件侦听器):响应某个时间的函数.以"on"开头. html方法: 某个元素支持的每种事件,都可以使用一个与之相应事件处理程序同名的HTML特性来制定.这个特性的值是可以执行的js代码. 例如:要在按钮被单击时执行一些js,可如下: <input type="button" value="click me" onclick="a

JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,

onfocus事件,onblur事件;Focus()方法,Blur()方法

<1> <pre name="code" class="html"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19

事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,重写onlick会覆盖之前属性,没有兼容性问题 ele.onclik = null; //解绑单击事件,将onlic

JavaScript和JQuery中的事件\委托链\事件冒泡\事件捕获,兼容所有浏览器

有做过北大青鸟培训讲师经验的我,如今在一家公司做技术部经理的职位,发现有很多程序员的基本功相当糟糕,在组织企业内部培训时讲解了一些案例,总结了一些经典代码,希望对自己和有需要的人提供一些帮助吧: JavaScript版本: DOM0事件不支持委托链 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="C

理解js事件冒泡事件委托事件捕获

js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <div id="col">    <p>        <a id="btn" href="#">button</a>    </p></div> <script> let b

JS DOM基础 事件概述 事件流 事件处理方法 添加监听器 事件类型 事件对象 事件委托

一.事件概述 事件是什么? 在我们的生活中,都会接触到事件这样一个概念,它通常通过描述发生这件事的时间.地点.人物,发生了什么来进行概括. 同样的在javascript也有这样的一个的东西------事件. 页面上发生的事件:鼠标移动.点击.滚动等等. 事件描述了页面上发生的事情,通常它有以下三个要素组成: 事件源:触发事件的元素 事件类型:事件的触发方式(例如鼠标点击或键盘点击) 事件处理程序(事件监听器):事件触发后要执行的代码(函数形式) Javascript 使我们可以动态的去操作一个页

事件冒泡 事件捕获 事件委托

在javascript里,事件委托是很重要的一个东西,事件委托依靠的就是事件冒泡和捕获的机制,我先来解释一下事件冒泡和事件捕获: 事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止.事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止. 这么说是不是很抽象,其实就像我敲击了一下键盘,我在敲击键盘的同时,我是不是也敲击了这台电脑,我写个例子大家就明白了: <!DOCTYPE html> <html> <head&