Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript addEventListener代码段翻译和跨浏览器检测的使用_Javascript_Cross Browser_Addeventlistener_Attachevent - Fatal编程技术网

Javascript addEventListener代码段翻译和跨浏览器检测的使用

Javascript addEventListener代码段翻译和跨浏览器检测的使用,javascript,cross-browser,addeventlistener,attachevent,Javascript,Cross Browser,Addeventlistener,Attachevent,我遇到了一段我想建模的代码。不过,我有几个问题,也许你们可以帮忙。代码如下: 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 &

我遇到了一段我想建模的代码。不过,我有几个问题,也许你们可以帮忙。代码如下:

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,IE支持attachEvent。我不确定的是,较旧的浏览器是否支持这两种功能

就注释掉的行而言:

/* else if (brw_obj.captureEvents) {
 brw_obj.captureEvents(Event.CLICK); // only works with FF 
}
*/
我在某个地方读到,captureEvents只受较旧的Firefox浏览器支持。在整个代码的上下文中,是否需要这些行


欢迎任何有见地的评论、批评和建议。谢谢

我已经使用try/catch方法有一段时间了,对于我当前的项目来说,它一直很好。请查看以下代码段:

var request;

try {
    request = new XMLHttpRequest(); // standard
}
catch (e) {
    request = new ActiveXObject("Microsoft.XMLHTTP"); // workaround
}
上面的示例应该适用于所有浏览器,返回到InternetExplorer5.0;当然,你不可能支持所有古老的浏览器,但是嘿,Mosaic并没有说JavaScript

因此,您可以尝试调用addEventListener,如果发现错误,则可以调用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函数,该函数将带走浏览器支持的任何内容。

o.m也可以写成o['m'],后者通常用于需要将m构建为字符串,而点符号不是选项的情况。谢谢@D.S.Schneider!有趣的方法。我刚才问过这个问题,所以我很抱歉这么晚才感谢你。
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.");
    }
}