在Firefox中打开选择列表中检测Escape按下?

时间:2016-01-29 11:37:45

标签: javascript firefox

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

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

在Safari中,有一个keyup事件,但在此上下文中没有前一个keydown事件。我可以通过在keydown上设置一个标记来解决,然后我可以在keyup上查看。

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中,当关闭keyup列表时,keydownselect似乎都会被激活。那么有没有办法检测列表是否已打开以便能够过滤掉它?或者是检测Firefox使用的唯一选项,只是在此浏览器中禁用Escape-to-cancel功能?

顺便说一句,我没有IE测试,这就是为什么现在没有提到它,尽管该网站主要是为了在Mac上使用。

0 个答案:

没有答案