2

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

推荐的解决方案是在禁用元素之上覆盖一个元素,并使用它来拦截点击事件。我想通过 JavaScript 注入覆盖,因为浏览和修改我禁用元素的所有实例比它的价值更麻烦(而且它污染了我的标记,我不太喜欢)。

有没有办法检测浏览器是否支持我正在做的事情并且只在这些浏览器中注入覆盖?我以为我可以做这样的事情,但 Firefox 给出了误报:

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

http://codepen.io/cimmanon/pen/HCfJi

4

1 回答 1

1

您应该对此进行测试,因为我只在 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;
}
于 2013-08-05T21:17:26.610 回答