我遇到了一段我想建模的代码。不过,我有几个问题,也许你们能帮忙。下面是代码:
function addEvent( brw_obj, type, func ) {
if (brw_obj.addEventListener) { // all browsers except IE < v9
brw_obj.addEventListener( type, func, false );
} else if (brw_obj.attachEvent) { // IE only for v < v9
brw_obj["e"+type+func] = func;
brw_obj[type+func] = function() {
brw_obj["e"+type+func]( window.event );
}
brw_obj.attachEvent( "on"+type, brw_obj[type+func] );
}
/* else if (brw_obj.captureEvents) {
brw_obj.captureEvents(Event.CLICK); // only works with FF < v3!
}
*/
}
现在,我有点理解,代码是检查addEventListener或attachEvent;但是下面这几行具体是什么意思呢?我还没见过这样写的javascript:
brw_obj["e"+type+func] = func;
brw_obj[type+func] = function() {
brw_obj["e"+type+func]( window.event );
}
brw_obj.attachEvent( "on"+type, brw_obj[type+func] );
另外,使用这个代码是做浏览器或对象检测的好方法吗?
我正在写一个脚本,需要确保它运行在所有的现代浏览器以及旧的。据我所知,大多数现代浏览器支持addEventListener, IE支持attachEvent。我不确定的是旧的浏览器是否支持这两种方式。
对于注释掉的行:
/* else if (brw_obj.captureEvents) {
brw_obj.captureEvents(Event.CLICK); // only works with FF
}
*/
我在某处读到,只有旧的Firefox浏览器支持捕获事件。在整个代码的上下文中,需要这些行吗?
欢迎任何有见地的评论、批评和建议。谢谢!:)
我已经使用try/catch方法一段时间了,它在我当前的项目中一直工作得很好。请看下面的代码片段:
var request;
try {
request = new XMLHttpRequest(); // standard
}
catch (e) {
request = new ActiveXObject("Microsoft.XMLHTTP"); // workaround
}
上面的示例应该可以在Internet Explorer 5.0之前的所有浏览器上工作;当然,你不可能支持所有古老的浏览器,但是,嘿,马赛克不讲JavaScript,无论如何。
你可以"try"调用addEventListener如果你"catch"到一个错误你可以调用attachEvent
就是我的$0,02.
我最近自己也遇到了addEventListener问题,所以下面是我目前对此事的处理方法:
function addEventListener(target, type, listener) {
if (target) {
if (target.addEventListener) {
target.addEventListener(type, listener, false);
}
else if (target.attachEvent) {
target.attachEvent("on" + type, listener);
}
}
else {
throw new Error("Can't addEventListener: target object is null.");
}
}
然后你只需调用新的addEventListener函数,它会带走浏览器支持的任何东西。