Javascript 检测Firefox中打开的选择列表上的转义按钮?

Javascript 检测Firefox中打开的选择列表上的转义按钮?,javascript,firefox,Javascript,Firefox,我正在编写一个界面,当按下Escape时,它会触发取消按钮(如果有)。但我不想干扰标准逻辑,即如果打开select下拉列表,Escape将关闭该列表。如果一个select元素恰好有焦点,那么应该取消该接口 在Chrome和Opera中,当select列表打开时,按Escape键不会触发任何事件,因此默认情况下一切正常 在Safari中有一个keyup事件,但在此上下文中没有前面的keydown事件。我已经能够通过在keydown上设置一个标志来解决问题,然后我可以在keydup上检查该标志 va

我正在编写一个界面,当按下Escape时,它会触发取消按钮(如果有)。但我不想干扰标准逻辑,即如果打开
select
下拉列表,Escape将关闭该列表。如果一个
select
元素恰好有焦点,那么应该取消该接口

在Chrome和Opera中,当
select
列表打开时,按Escape键不会触发任何事件,因此默认情况下一切正常

在Safari中有一个
keyup
事件,但在此上下文中没有前面的
keydown
事件。我已经能够通过在
keydown
上设置一个标志来解决问题,然后我可以在
keydup
上检查该标志

var _menuEscapeState = false
    ,_menu = document.getElementById( 'menu' );

_menu.addEventListener( 'keydown' ,function( e ) {
    var e = e || window.event;
    _menuEscapeState = ( e.which === 27 );
} );

_menu.addEventListener( 'keyup' ,function( e ) {
    var e = e || window.event;
    if( e.which === 27 && _menuEscapeState ) {
        // DO STUFF
    }
    _menuEscapeState = false;
} );
但在Firefox中,当关闭
选择列表时,
键向上
键向下
都会触发。那么,有没有办法检测列表是否已打开,以便能够过滤掉这些内容?或者是检测Firefox使用情况并在此浏览器中简单地禁用Escape以取消功能的唯一选项

顺便说一句,我没有IE测试,这就是为什么在这个时候没有提到它,虽然该网站的主要目的是在Mac上使用