Javascript-检测是否支持事件列表器

Javascript-检测是否支持事件列表器,javascript,javascript-events,event-handling,detection,browser-detection,Javascript,Javascript Events,Event Handling,Detection,Browser Detection,是否可以检测某些浏览器是否支持某些事件? 我可以检测浏览器是否支持document.addEventListener,但我需要知道它是否支持事件DOMATRTMODIFED。Firefox和Opera支持它,但Chrome和其他浏览器不支持 如果有人能帮忙,谢谢 更新答案: 是,您可以检测此功能。创建元素,侦听事件,并更改元素的属性。在我的测试中,您甚至不必将元素添加到DOM树中,这使它成为一个很好的、包含的特性检测 例如: function isDOMAttrModifiedSupported

是否可以检测某些浏览器是否支持某些事件? 我可以检测浏览器是否支持document.addEventListener,但我需要知道它是否支持事件DOMATRTMODIFED。Firefox和Opera支持它,但Chrome和其他浏览器不支持


如果有人能帮忙,谢谢

更新答案

,您可以检测此功能。创建元素,侦听事件,并更改元素的属性。在我的测试中,您甚至不必将元素添加到DOM树中,这使它成为一个很好的、包含的特性检测

例如:

function isDOMAttrModifiedSupported() {
    var p, flag;

    flag = false;
    p = document.createElement('p');
    if (p.addEventListener) {
        p.addEventListener('DOMAttrModified', callback, false);
    }
    else if (p.attachEvent) {
        p.attachEvent('onDOMAttrModified', callback);
    }
    else {
        // Assume not
        return false;
    }
    p.setAttribute('id', 'target');
    return flag;

    function callback() {
        flag = true;
    }
}

Firefox会触发对上述所有修改的回调;没有一个是镀铬的


原始答案

您可以检测是否支持某些事件,如所示。我不知道您是否可以专门针对该代码进行测试,但如果可以,该代码很可能会让您开始


更新:我尝试了它,但这种嗅探技术似乎不适用于该事件(除非我的名称拼写错误或其他原因;Firefox显示为“false”)。但我的上述技术确实如此。

我认为不可能在这里看到对IE和Chrome的支持:谢谢,不过我已经为所有浏览器提供了可行的解决方案。我希望找到一种方法来检测某些浏览器是否支持该事件,以便我可以应用我的替代方法。看来我可能不得不求助于jQuery.browser检测。@ifaour:哇,真奇怪。另见FF 3.6。然而,我们都知道这不是真的……ppk声明,
DOMAttrModified
类型事件不能与传统的
OneEvent
事件注册系统一起工作,因此这可能是导致测试失败的原因,该测试只在element@Yi江:是的,kangax的代码用于测试用户生成的事件。我更新的答案中的测试非常有效,因为我们可以轻松触发我们测试的条件。:-)谢谢Crowder,效果很好!巧合的是,我刚刚想出了这个解决方案,然后把它贴在这里,结果却发现你比我抢先一步!
function isDOMAttrModifiedSupported () {
    var supported = false;
    function handler() {
      supported = true;
    }
    document.addEventListener('DOMAttrModified', handler);
    var attr = 'TEST';
    document.body.setAttribute(attr, 'foo'); // aka $('body').attr(attr, 'foo');
    document.removeEventListener('DOMAttrModified', handler);
    document.body.setAttribute(attr, null);
    return supported;
  }