javascript在事件监听方面的兼容性小结

1,IE使用attachEvent/detachEvent方法来添加和删除事件监听器;w3c使用addEventListener/removeEventListener方法。

2,IE对其事件使用onevent的命名方式,而w3c的是event的命名方式。

3,IE事件监听器内使用的是一个全局的Event对象,而w3c是将event对象作为参数传递给监听器。

4,为了避免触发默认的事件行为,IE的做法是要求程序员设置Event对象中的returnValue属性值为false,而w3c的做法是执行preventDefault方法。

5,IE没有提供对事件捕获阶段的支持。

6,要停止事件的传递,IE的做法是设置event对象的cancelBubble为true,而w3c的做法是设置执行stopPropagation方法。

7,IE将事件监听器当做一个独立的函数来调用,而w3c中它是作为对象的方法来调用的,这表示在ie中事件监听器中的this关键字指向的不是事件发生对象而是一个没用的全局对象(window对象)。

8,IE在使用事件监听器方面存在内存泄露问题。在IE浏览器中,如果要为某个元素创建一个事件监听器,并且在监听器中使用该元素,则在用户进入其他页面之前,该监听器以及相关的DOM节点作占据的内存空间不会被释放。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
以下分析基于jQuery-1.10.2.js版本。 下面将以$("div:not(.class:contain('span')):eq(3)")为例,说明tokenize和preFilter各段代码是如何协调完成解析的。若想了解tokenize方法和preFilter类的每行代码的详细解释,请参看如下两篇文章: http://www.jb51.net/article/63155.htm http://www.jb51.net/article/63163.htm 下面是tokenize方法的源码,为了简便期
这样之前的功夫又白费了。解决这些问题的办法就是:监控页面数据是否发生变化。如果发生变化,提示用户保存。如果数据未发生变化。当我们点击保存时,也不需要提交到数据库。 接下来看看解决办法: 复制代码 代码如下: ///reference path="jquery-1.3.2-vsdoc2.js" / (function($) { var pageDataChange = false //默认标识页面数据未发生改变 /*监控页面数据是否发生变化*/ $.fn.MonitorDataChange = functio
所以绝大多数的脚本里,都是直接通过元素的id来访问DOM的。 后来随着各种浏览器接踵而至,逐渐的替代了ie。为了保证各路门派统一规则,标准化越来越被重视。当初那种直接访问id的方法,逐渐被document.getElementById所替代。如果这年头还在用id访问元素,要么就是做程序里的内嵌网页,要么就是像铁道部那样的超境界仿古网站:) 当然只要保证你的用户都是用ie访问,这样的非标准也但用无妨。 然而,很多第三方浏览器刚出来的时候,为了保证能与当时大量的非标准页面兼容,都保留了用id访问DOM这一非标准
言归正传,以下是全文。 先附上两张最简单的效果图。 首先编写简单的HTML代码。用作tabs的UL标签和包含内容的p标签。 ullia href=#> div id="first"p今天我,寒夜里看雪飘过。怀着冷却了的心窝飘远方……仍然自由自我,永远高唱我歌,走遍千里。/p/div div id="second"p钟声响起归家的讯号,在他生命里仿佛带点唏嘘……自信可改变未来,问谁又能做到。/p/div div id="third"p无法可修饰的一对手,带出温暖永远在背后……请准我说声,真的爱你。/p/di
myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当
Jquery代码 复制代码 代码如下: script type="text/javascript" src="jquery-1.4.2.min.js"/script script type="text/javascript" function Checked(){ //定义函数checked $(".chk").each(function(){ //遍历html中class为chk的复选框标签 if($(this).attr("checked") == true){ //如果当前复选框的checked属性
有些情况下,同一个form在不同的情况下提交到不同的处理动作,可以在js中动态改变form的属性,满足不同条件的form提交需求。 如: 复制代码 代码如下: form id="form" name="form" method="POST" enctype="multipart/form-data" action="action1.jsp" target="iframe" input type="file" name="file" id="file" class="input_text80"/input i
由于顶级对象是使用类库几乎所有功能的入口,在编码中会频繁地输入这几个字符,因此在设计类库时,顶级对象名输入的简便性也是相当重要的。 在此将从对象名称的长度、输入对象名称的按键顺序这两个方面对三个类库进行重点比较,同时力求照顾到一些特别的点,从而得出一个较为全面的评测结果。 名称长度 jQuery共有6个字符组成,从长度上而言是三个类库中最长的一个,同时包含了一个大写字母Q,在输入过程中需要加入一次SHIFT键,因此长度值给定为7。 Ext共有3个字符组成,在长度上是最有优势的,由于首字母为大写字母E,输入过

js 函数调用模式小结 - 2015-04-13 20:04:06

方法调用模式 当一个函数被保存为对象的一个属性时,我们称之它为该对象的一个方法,那么this被绑定到该对象上。 复制代码 代码如下: var myObject={ name : "myObject" , value : 0 , increment : function(num){ this.value += typeof(num) === 'number' ? num : 0; } , toString : function(){ return '[Object:'+this.name+' {value:
打包用到的批处理文件代码如下: 复制代码 代码如下: @echo off title Builder - 正在合并 ... color 03 REM ===================================== REM jsbuilder beta版 REM REM ===================================== SETLOCAL ENABLEEXTENSIONS echo. REM 过滤文件后缀,只combo js文件 if "%~x1" NEQ ".js" (