您的位置:首页 > Web前端 > JQuery

对于原生态的addEventListener与jqueryDOM操作对于事件处理的区别

2013-04-23 00:00 459 查看
今天看了WTP写的文章,感觉确实如此,在此总结一下自己的心得。

文章中提到,对于jquery添加DOM事件

$(document).click(function(){
console.log('1');
})

$(document).click(function(){
console.log('2');
})
当点击document的时候,控制台会输出1和2.

但是如果在js中添加一段代码

$(document).click(function(){
console.log('1');
C++
})

$(document).click(function(){
console.log('2');
})
这个时候,当你点击document的时候,控制台会报错,说“C”没有被定义。。。。

结果是:输出了1,接着抛出了一个异常,没有输出2

当我们使用浏览器自带的方法“addEventListener”的时候

document.addEventListener('click',function(){
console.log('1');
C++;
},false);

document.addEventListener('click',function(){
console.log('2');
},false);


这个时候,我们在控制台中可以看到结果是:

1

C is not defined

2

我们可以看出,对于浏览器的addEventListener与jquery的处理方式是不一样的。

文章上面总结的好,把这两种处理方式定义成:继续执行策略,停止执行策略

继续执行策略:浏览器会抛出异常,然后继续执行后面的方法。

停止执行策略:jquery会抛出异常,然后停止执行后面的方法。

对于继续执行策略,核心思想是:事件handlers之间应该彼此无依赖,即便有异常也不能影响到其他的handlers的执行,实现上面可以通过 "try catch "或者“setTimeout”等方式,确保不影响到别的事件的执行。

对于停止执行策略,核心思想是:事件handlers之间应该彼此无依赖,当某一个handler异常的时候,不应该当作没有看见,继续执行其他的handler。

最后作者得出了总计:无论停止还是继续执行,都同意事件handlers之间应该彼此无依赖的,这一点是不存在分歧的,但是在涉及到异常的时候,两种方法有两种做法了。

最后作者留给我们一个小任务:去了解下YUI,MooTools,Prototype,Dojo的处理策略。

下午去查一下:然后写上来。

(还是忙的忘了时间去查了)

支持持续执行的类库框架有: MooTools,Prototype,Dojo

支持停止执行的类库框架有:YUI3,JQuery,Backbone

最后感谢“WTP”的作者-玉伯的精彩的文章。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript jquery