为什么在按住左键的同时移动鼠标时,JavaScript中的元素不会触发keyup事件?

时间:2015-10-22 13:28:04

标签: javascript javascript-events keyboard-events onkeyup

我想我遇到了一个非常奇怪的(对我来说)情况。我有一个" keyup"绑定到div的事件(当然设置为tabindex),其中包含Google Map。基本上我需要在按下shiftKey时禁用地图拖动功能,并在按键启动时再次启用它:

            mapElement.setAttribute("tabindex", 0);
            mapElement.focus();
            google.maps.event.addDomListener(mapElement, "mouseover", function(e) {
                mapElement.focus();
            });
            google.maps.event.addDomListener(mapElement, "mouseout", function(e) {
                mapElement.blur();
            });            
            google.maps.event.addDomListener(mapElement, "keydown", function(e) {
                var isShift;
                if (window.event) {
                  isShift = !!window.event.shiftKey;
                }
                else {
                  isShift = !!e.shiftKey;
                }                
                if (isShift) {                     
                    map.setOptions({ draggable: false });
                }
            });

现在,为了做到这一点,我添加了一个keyup事件,如下所示:

google.maps.event.addDomListener(mapElement, "keyup", function(e) {
                var isShift;
                console.log(e);
                if (window.event) {
                  isShift = !!window.event.shiftKey;
                } 
                else {
                  isShift = !!e.shiftKey;
                }
                if (!isShift) {               
                    map.setOptions({ draggable: true });
                }
            });

但如果按顺序执行以下步骤,则不会触发此事件:

1)在鼠标结束时按下shift键地图(mouseover)(此处禁用地图拖动);

2)按住shift键的同时,按下鼠标左键并将光标移动到地图上;

3)在按下左按钮的同时在地图上移动光标时,突然释放班次key (此时一直按下) - > 在这里我希望我设置的keyup事件被触发,地图再次变为可拖动,但它不是...... ;

只有当我第一次释放鼠标左键然后时,我才能正常工作。我将shift键抬起。当然,我的解决方法是添加一个" mousemove"事件,像这样:

google.maps.event.addDomListener(mapElement, "mousemove", function(e) {
                if (!e.shiftKey) {
                    map.setOptions({ draggable: true });
                }
            });

但在JS事件处理方面,有人能比我更专业的人告诉我这里发生了什么以及为什么keyup没有被解雇?

感谢您的关注!

0 个答案:

没有答案