addEvent - 迟到的条目:) [英] addEvent - The late entry :)

查看:38
本文介绍了addEvent - 迟到的条目:)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开玩笑地说这是迟到的条目:)


好​​的我已经阅读了John''s Resig'的AddEvent所有的活动录入评论

comepition blog: -

http:/ /ejohn.org/projects/flexible-javascript-events/

并为我的LGPL图书馆功能整理以下产品: -


函数addEvent(el,type,fn,cascade){

if(el.addEventListener){

cascade = cascade || false;

el.addEventListener(type,fn,cascade)

}

else if(el.attachEvent){

el [type + fn] = function(){

fn.call(el,window.event);

}

el.attachEvent(''on''+ type,el [type + fn])

}

else

el [''on ''+ type] = fn

}

函数removeEvent(el,type,fn,cascade){

if(el.removeEventListener) {

cascade = cascade || false;

el.removeEventListener(type,fn,cascade)

}

else if(el.detachEvent){

el.detachEvent(''on''+ type,el [type + fn])

el [type + fn] = null; //清除哈希和IE内存泄漏

}

其他

el [''on''+ type] = null

}

经验教训: -


首先打电话给W3C以满足Opera的需求,然后是MS,因为这是

通常很容易被发现,然后是遗产。

基于''Weisi Su''条目
http://ejohn.org/projects/flexible-j...comment-276560

Michael White建议首先使用W3C在Opera上正确操作。

加上我添加的遗留事件处理。最后这一切都非常类似于我前一天编写的一些代码并且忘记了:)


在W3C上添加默认为bubble的cascade参数电话。


完整的测试用例可以在这里找到: -

http://www.aarongray.org/Test/JavaScript/EventTest.html


好​​的我已经在IE6和Drip上尝试了它,它似乎没有产生

和内存泄漏AFAICS。


Drip IE内存泄漏检测器: -

http://ejohn.org/projects/flexible -javascript-events /

我在32位Vista IE7.0.6001,Safari 3.1.2和Opera 9.51上测试过它; XP

IE6。


任何浏览器测试都会受到赞赏,尤其是对于年龄较大且不太知名的浏览器测试。


好​​吧,那就是人们...任何评论......漏洞......或建议最多

欢迎。


此致,


Aaron

I jokingly say this is the late entry :)

Okay I have read all the event entry comments from John''s Resig''s AddEvent
comepition blog :-

http://ejohn.org/projects/flexible-javascript-events/

and put together the following offering for my LGPL''ed library functions :-

function addEvent( el, type, fn, cascade) {
if ( el.addEventListener) {
cascade = cascade || false;
el.addEventListener( type, fn, cascade)
}
else if ( el.attachEvent) {
el[type+fn] = function() {
fn.call( el, window.event);
}
el.attachEvent( ''on''+type, el[type+fn])
}
else
el[ ''on''+type] = fn
}
function removeEvent( el, type, fn, cascade) {
if ( el.removeEventListener) {
cascade = cascade || false;
el.removeEventListener( type, fn, cascade)
}
else if ( el.detachEvent) {
el.detachEvent( ''on''+type, el[type+fn])
el[type+fn] = null; // clear hash and IE memory leak
}
else
el[ ''on''+type] = null
}
Lessons :-

call W3C first to satisfy Opera and for common sence, then MS as this is
usually easy detectable, then legacy.
Based on ''Weisi Su'' entry on
http://ejohn.org/projects/flexible-j...comment-276560 and
Michael White'' suggestion using W3C first for correct operation on Opera.
plus legacy event handling added by me. Which in the end was all very
simular to some code I wrote the previous day and forgot about :)

Added cascade parameter that defaults to bubble on W3C calls.

The full test case can be found here :-

http://www.aarongray.org/Test/JavaScript/EventTest.html

Okay I have tried it on IE6 with and Drip and it does not seem to produce
and memory leaks AFAICS.

Drip IE memory leak detector :-

http://ejohn.org/projects/flexible-javascript-events/

I have tested it on 32Bit Vista IE7.0.6001, Safari 3.1.2, and Opera 9.51; XP
IE6.

Any browser testing appreciated, particularly on older and less well known
ones.

Well thats about it folks...any comments...holes...or suggesttions are most
welcome.

Regards,

Aaron

推荐答案

Drip IE内存检漏仪: -

对不起应该是: -

http://www.outofhanwell.com/ieleak/i...itle=Main_Page

Aaron

Drip IE memory leak detector :-

Sorry that should be :-

http://www.outofhanwell.com/ieleak/i...itle=Main_Page

Aaron


" Aaron Gray" < an ******** @ gmail.comwrote in message

news:6e ************ @ mid.individual.net ...
"Aaron Gray" <an********@gmail.comwrote in message
news:6e************@mid.individual.net...

>我开玩笑说这是迟到的条目:)


好​​的我已经阅读了约翰的所有活动录入评论's Resig'的AddEvent

comepition博客: -

http://ejohn.org/projects/flexible-javascript-events/

并整理以下产品我的LGPL''库函数

: -


函数addEvent(el,type,fn,cascade){

if (el.addEventListener){

cascade = cascade || false;

el.addEventListener(type,fn,cascade)

}

else if(el.attachEvent){

el [type + fn] = function(){

fn.call(el,window.event);

}

el.attachEvent(''on''+ type,el [type + fn])

}

else

el [''on ''+ type] = fn

}

函数removeEvent(el,type,fn,cascade){

if(el.removeEventListener) {

cascade = cascade || false;

el.removeEventListener(type,fn,cascade)

}

else if(el.detachEvent){

el.detachEvent(''on''+ type,el [type + fn])

el [type + fn] = null; //清除哈希和IE内存泄漏

}

其他

el [''on''+ type] = null

}


经验教训: -


首先打电话给W3C以满足Opera的需求,然后是MS,因为这是

通常很容易被发现,然后是遗产。

基于''Weisi Su''条目
http://ejohn.org/projects/flexible-j...comment-276560

Michael White'建议首先使用W3C在Opera上正确操作。

加上我添加的遗留事件处理。最后这一切都非常类似于我前一天编写的一些代码并且忘记了:)


在W3C上添加默认为bubble的cascade参数电话。


完整的测试用例可以在这里找到: -

http://www.aarongray.org/Test/JavaScript/EventTest.html


好​​的我已经在IE6和Drip上尝试了它,它似乎没有产生

和内存泄漏AFAICS。


Drip IE内存泄漏检测器: -

http://ejohn.org/projects/flexible -javascript-events /

我在32Bit Vista IE7.0.6001,Safari 3.1.2和Opera 9.51上测试过它;

XP IE6。


任何浏览器测试都会受到赞赏,特别是对于较旧且不太知名的

的浏览器。


那就好了关于它的人...任何评论...漏洞...或建议是

最受欢迎。
>I jokingly say this is the late entry :)

Okay I have read all the event entry comments from John''s Resig''s AddEvent
comepition blog :-

http://ejohn.org/projects/flexible-javascript-events/

and put together the following offering for my LGPL''ed library functions
:-

function addEvent( el, type, fn, cascade) {
if ( el.addEventListener) {
cascade = cascade || false;
el.addEventListener( type, fn, cascade)
}
else if ( el.attachEvent) {
el[type+fn] = function() {
fn.call( el, window.event);
}
el.attachEvent( ''on''+type, el[type+fn])
}
else
el[ ''on''+type] = fn
}
function removeEvent( el, type, fn, cascade) {
if ( el.removeEventListener) {
cascade = cascade || false;
el.removeEventListener( type, fn, cascade)
}
else if ( el.detachEvent) {
el.detachEvent( ''on''+type, el[type+fn])
el[type+fn] = null; // clear hash and IE memory leak
}
else
el[ ''on''+type] = null
}
Lessons :-

call W3C first to satisfy Opera and for common sence, then MS as this is
usually easy detectable, then legacy.
Based on ''Weisi Su'' entry on
http://ejohn.org/projects/flexible-j...comment-276560 and
Michael White'' suggestion using W3C first for correct operation on Opera.
plus legacy event handling added by me. Which in the end was all very
simular to some code I wrote the previous day and forgot about :)

Added cascade parameter that defaults to bubble on W3C calls.

The full test case can be found here :-

http://www.aarongray.org/Test/JavaScript/EventTest.html

Okay I have tried it on IE6 with and Drip and it does not seem to produce
and memory leaks AFAICS.

Drip IE memory leak detector :-

http://ejohn.org/projects/flexible-javascript-events/

I have tested it on 32Bit Vista IE7.0.6001, Safari 3.1.2, and Opera 9.51;
XP IE6.

Any browser testing appreciated, particularly on older and less well known
ones.

Well thats about it folks...any comments...holes...or suggesttions are
most welcome.



这里有一些稍微高效的代码: -


if(window.addEventListener){

var addEvent = function(el,type,fn,cascade){

cascade = cascade || false;

el.addEventListener(type,fn,cascade)

}

var removeEvent = function(el,type,fn,cascade) {

cascade = cascade || false;

el.removeEventListener(type,fn,cascade)

}

}

else if(window .attachEvent){

var addEvent = function(el,type,fn){

el [type + fn] = function(){

fn.call(el,window.event);

}

el.attachEvent(''on''+ type,el [type + fn])

}

var removeEvent = function(el,type,fn){

el.detachEvent(''on''+ type,el [type + fn])

el [type + fn] = null; //清除哈希和IE内存泄漏

}

}

其他

{

var addEvent = function(el,type,fn,cascade){

el [''on''+ type] = fn

}

var removeEvent = function(el,type,fn){

el [''on''+ type] = null

}

}


测试案例: -

http://www.aarongray.org/Test/JavaSc...ventTest2.html

Aaron


" Aaron Gray" < a ******** @ gmail.comwrote in message

news:6e ************ @ mid.individual.net ...


遗留案例: -
"Aaron Gray" <an********@gmail.comwrote in message
news:6e************@mid.individual.net...

legacy case :-

{

var addEvent = function(el,type,fn) ,cascade){
{
var addEvent = function( el, type, fn, cascade) {



cascade参数不应该在这里

cascade parameter should not be here


el [''on''+输入] = fn

}

var removeEvent = function(el,type,fn){

el [''on''+ type ] = null

}

}
el[ ''on''+type] = fn
}
var removeEvent = function( el, type, fn) {
el[ ''on''+type] = null
}
}



if(window.addEventListener){

var addEvent = function(el,type,fn,cascade){

cascade = cascade || false;

el.addEventListener(type,fn,cascade)

}

var removeEvent = function(el,type,fn,cascade) {

cascade = cascade || false;

el.removeEventListener(type,fn,cascade)

}

}

else if(window .attachEvent){

var addEvent = function(el,type,fn){

el [type + fn] = function(){

fn.call(el,window.event);

}

el.attachEvent(''on''+ type,el [type + fn])

}

var removeEvent = function(el,type,fn){

el.detachEvent(''on''+ type,el [type + fn])

el [type + fn] = null; //清除哈希和IE内存泄漏

}

}

其他

{

var addEvent = function(el,type,fn){

el [''on''+ type] = fn

}

var removeEvent = function(el,type,fn){

el [''on''+ type] = null

}

}


正确的测试用例: -

http://www.aarongray.org/Test/JavaSc...ventTest2.html


Aaron

if ( window.addEventListener) {
var addEvent = function( el, type, fn, cascade) {
cascade = cascade || false;
el.addEventListener( type, fn, cascade)
}
var removeEvent = function( el, type, fn, cascade) {
cascade = cascade || false;
el.removeEventListener( type, fn, cascade)
}
}
else if ( window.attachEvent) {
var addEvent = function( el, type, fn) {
el[type+fn] = function(){
fn.call( el, window.event);
}
el.attachEvent( ''on''+type, el[type+fn])
}
var removeEvent = function( el, type, fn) {
el.detachEvent( ''on''+type, el[type+fn])
el[type+fn] = null; // clear hash and IE memory leak
}
}
else
{
var addEvent = function( el, type, fn) {
el[ ''on''+type] = fn
}
var removeEvent = function( el, type, fn) {
el[ ''on''+type] = null
}
}

Correct test case :-

http://www.aarongray.org/Test/JavaSc...ventTest2.html

Aaron


这篇关于addEvent - 迟到的条目:)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆