Javascript 试图了解点击事件<;选择>;元素

Javascript 试图了解点击事件<;选择>;元素,javascript,dom,cross-browser,Javascript,Dom,Cross Browser,当在select元素上注册单击事件处理程序时,我发现浏览器之间的行为非常不一致。我成立了一个公司。我看到的是: OSX上的Firefox12(10.7 Lion):单击元素时触发事件。下拉列表会短暂打开,但不会保持打开状态。键盘操作不会生成单击操作 Linux上的Firefox12(Ubuntu Lucid):相同 OSX上的Chome 19:没有鼠标或键盘交互触发单击事件 Linux上的Chrome 19:第一次鼠标单击扩展选项,然后单击仍然存在的选择或选项,触发单击事件 OS X上的Saf

当在
select
元素上注册单击事件处理程序时,我发现浏览器之间的行为非常不一致。我成立了一个公司。我看到的是:

  • OSX上的Firefox12(10.7 Lion):单击元素时触发事件。下拉列表会短暂打开,但不会保持打开状态。键盘操作不会生成单击操作
  • Linux上的Firefox12(Ubuntu Lucid):相同
  • OSX上的Chome 19:没有鼠标或键盘交互触发单击事件
  • Linux上的Chrome 19:第一次鼠标单击扩展选项,然后单击仍然存在的选择或选项,触发单击事件
  • OS X上的Safari 5.1.6:与Linux上的Chrome类似,首先单击扩展选项,然后单击选项触发单击事件(与Chrome不同,Safari在显示选项时隐藏select元素)
  • Android浏览器(在冰淇淋三明治上):初始点击触发事件。选项在事件后保持可见,并且可以单击。单击这些选项不会触发另一个事件
  • Android版Chrome测试版(冰淇淋三明治):与Android浏览器相同
如果有人能告诉我或给我指出标准,我会很高兴,但我想这没什么用,因为我已经直接观察到没有人遵循它。我怀疑的是,这是一种不寻常的尝试,也许更常见的是倾听变化事件。这是真的吗?听一下选项上的点击怎么样?我无法让它工作,但它可能是一个愚蠢的错误


(为了提供更多的上下文,我正在替换一个构建在Google Closure的
goog.ui.select
上的select元素,因为该组件很好地模仿了一些桌面
select
渲染,尤其是Chrome的,但无法对移动浏览器上看到的扩展选项进行全屏渲染。而应用程序以前没有o该组件的
goog.ui.component.EventType.ACTION
event,没有明显的模拟,所以我只是想找到一个一致的替代品。)

这是HTML生活标准,最后更新于2013年7月12日(2013年7月14日访问)。此链接直接指向SELECT元素。在其他区域,它表示任何HTMLElement都应该能够处理onclick事件,并给出了使用javascript添加侦听器的示例。当然,真正的问题是哪些浏览器可靠地支持指定的标准


唯一一致的是使用onchange和onblur。除此之外,这是一个废话。onchange也不一致,在使用键盘导航的IE中,每次访问一个新选项时都会触发onchange。其他浏览器只有在选择一个选项时才会触发它。它应该只在选择一个选项并且控件失去焦点后才会触发。是的,这真是一团糟。我不知道这是否有帮助,但mousedown事件在firefox、chrome和10.8 mountain lion上的safari中的行为方式(仅在显示列表时才触发事件)是相同的。在quirksmode中有一个很好的测试页面,HTML5规范旨在编纂所有这些疯狂的跨浏览器行为,因此您可以查看。