JavaScript Event学习第一章:Event介绍
2010-03-30 00:00:00 来源:WEB开发网一个简单的代码片段如下:
if (Netscape) {
use Netscape model
}
else if (Explorer) {
use Microsoft model
}
这只是解决问题的一个开始而已。最近的浏览器能运行的事件处理程序的数量是巨大的,除非你的代码不允许除了Netscape或者IE其他少数浏览器运行。
所有的小众浏览器都必须不那么光彩的决定支持那种事件模型。Konqueror/Safari通常都选择严格的按照W3C的标准执行。Opera和iCab通常都会支持大部分的老的Netscape模型和一些微软的模型。我对其他的更小众的浏览器还没有做研究。
但是其他的更小众的浏览器可能选择支持微软处理事件的方法,同时又有W3C和老的Netscape的属性。这都没什么问题,总之他们都是以他们自己的方法支持我们知道的模型。你的代码应该没有问题。
不要使用浏览器类型检测
首先,永远永远都不要使用浏览器检测,这是通向地狱的捷径。任何代码如果使用navigator.userAgent来做事件模型的检测,那简直比没用还没用应该直接拉出去弹JJ。
第二,不要被DHTML的object detection的事件对象检测所迷惑。当你写DHTML的时候通常检测DOM的支持性,比如,if(document.all)。如果支持,那么代码如果使用Microsot的all容器就能搞很好的运行。
但是DHTML和事件处理程序有不同的浏览器兼容性模式。比如,Opera 6支持W3C DOM的一部分但是不支持W3C event模型。因此DHTML对象检测在Opera下会做出错误的决定。所以代码使用if(document.layers)或者其他的事件模型检测都是不正确的。
正确的问题
那么我们怎么办?Event属性的名字造成了这些问题。如果我们针对具体的对象探测使用不同的办法,基本上能解决99%的浏览器的不兼容问题。只有鼠标位置非常的麻烦,其他的都比较简单了。
编缉推荐阅读以下文章
- JavaScript Event学习补遗:addEventSimple
- JavaScript Event学习第十一章:按键的检测
- JavaScript Event学习第十章:一些可替换的事件对
- JavaScript Event学习第九章:鼠标事件
- JavaScript Event学习第八章:事件的顺序
- JavaScript Event学习第七章:事件属性
- JavaScript Event学习第六章:事件的访问
- JavaScript Event学习第五章:高级事件注册模型
- JavaScript Event学习第四章:传统的事件注册模型
- JavaScript Event学习第三章:早期的事件处理程序
Tags:JavaScript Event 学习
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接