2014-11-06 33 views
2

我目前遇到了尝试使用JavaScript事件对象的问题。我有一个等待onblur事件的Javascript函数,并检查是否正在按下文档上的某个元素的shift键,并在这种情况下执行某些操作。 event.shiftKey在IE 9中完美工作以检测是否按下了shift键,但是对于IE 11中的onblur事件,事件对象不同,并且它不支持shiftKey事件。当我对事件对象做出警告时,它说IE9中的'[ojbect msEventObj]'和IE 11中的'[object focusEvent]'。有没有办法解决IE 9和IE 11之间的区别?Javascript无法访问IE 11中的onblur函数中的键盘事件,但不是IE 9

这里的JavaScript代码:

//using alert(event.shiftkey) gives me undefined in IE 11 because event 
//is focusEvent object not msEventObj for some reason 
element.onblur = function(){ 
    if (event.shiftKey == false) { 
     alert('shift key was not pressed!'); 
    } 
} 

回答

0

你没有定义事件,应该是这样的:

element.onblur = function (event){ 
    if (event.shiftKey == false) { 
     alert('shift key was not pressed!'); 
    } 
} 
+0

这就是我的想法,但event.shiftKey总是未定义的。无论如何,从控制系统导航时为什么有人会换班? – 2014-11-06 14:51:33

+0

井事件将不确定,并会发生错误... – 2014-11-06 14:53:05

+0

另外,正如我在我的回答中所说,'shiftKey'不是onblur事件的属性。 – 2014-11-06 15:41:12

1

的问题是,event.shiftKey不能从访问的onblur - 你没有将活动传递给您的活动处理程序 - 我认为您正在尝试针对onkeypress:

element.onkeypress = function (ex) { //pass event to handler ('ex' in this example) 
      alert(ex.shiftKey); 
     } 

当shift键被按下时返回true,否则返回false。

0

我遇到了类似的问题,用于制表导航。

element.addEventListener('keydown', (event) => { 
    if (event.keyCode !== 9) return; 
    if (!event.shiftKey) { 
     event.preventDefault(); 
     YOURTARGET.focus(); 
    } 
}); 

取而代之的是模糊的事件,我听一个的keydown,检查它是否选项卡,然后运行我想要的代码。它使我能够访问event.shiftKey