Javascript 如何检测对禁用元素上事件的支持?

Javascript 如何检测对禁用元素上事件的支持?,javascript,Javascript,Firefox不支持禁用输入元素上的事件(请参阅:),但我测试过的所有其他浏览器(IE8、Chrome、Opera、Safari5)都支持它。问题是,我希望通过事件委派使用onClick事件来启用禁用的元素(demo:) 建议的解决方案是在禁用的元素上覆盖一个元素,并使用它来拦截单击事件。我希望通过JavaScript注入覆盖,因为遍历和修改禁用元素的所有实例比它的价值要麻烦得多(另外它污染了我的标记,我并不喜欢) 有没有一种方法可以检测浏览器是否支持我正在做的事情,并且只在那些浏览器中注入覆盖

Firefox不支持禁用输入元素上的事件(请参阅:),但我测试过的所有其他浏览器(IE8、Chrome、Opera、Safari5)都支持它。问题是,我希望通过事件委派使用onClick事件来启用禁用的元素(demo:)

建议的解决方案是在禁用的元素上覆盖一个元素,并使用它来拦截单击事件。我希望通过JavaScript注入覆盖,因为遍历和修改禁用元素的所有实例比它的价值要麻烦得多(另外它污染了我的标记,我并不喜欢)

有没有一种方法可以检测浏览器是否支持我正在做的事情,并且只在那些浏览器中注入覆盖?我本以为我可以这样做,但Firefox给出了一个错误的肯定:

var foo = document.getElementById('foo');
foo.onclick = function(e) {
  return true;
}
if (foo.onclick()) {
  console.log('browser supported!');
}

您应该对此进行测试,因为我只在Firefox和Chrome的一个版本中对其进行了测试,但它似乎能够正确检测禁用的输入是否支持事件(dispatchEvent会对禁用的输入引发异常):

function hasEventsOnDisabled(){
  var input = document.createElement('input');
  input.disabled = true;

  var e = document.createEvent('HTMLEvents');
  e.initEvent('click', true, true);

  try{
    input.dispatchEvent(e);
    return true;
  }catch(err){}

  return false;
}