我目前遇到了尝试使用JavaScript事件对象的问题。我有一个等待onblur事件的Javascript函数,并检查是否正在为文档中的元素按下shiftkey并执行某些操作(如果是这种情况)。 event.shiftKey在IE 9中完美地工作以检测是否按下了shift键,但是对于IE 11中的onblur事件,事件对象是不同的,并且它不支持shiftKey事件。当我对事件对象发出警报时,它说它是' [ojbect msEventObj]'在IE 9和' [object focusEvent]'在IE 11中。有没有办法解决IE 9和IE 11之间的这种差异?
以下是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 :(得分:1)
问题是无法从onblur访问event.shiftKey - 而且你没有将事件传递给你的事件处理程序 - 我认为你正试图以onkeypress为目标:
element.onkeypress = function (ex) { //pass event to handler ('ex' in this example)
alert(ex.shiftKey);
}
当按住shift键时返回true - 否则返回false。
答案 1 :(得分:0)
你没有定义事件,应该是这样的:
element.onblur = function (event){
if (event.shiftKey == false) {
alert('shift key was not pressed!');
}
}
答案 2 :(得分:0)
我遇到了类似标签导航的问题。
function getStatus(item) {
return $(item).hasClass("active")
}
$(document).on("page:change", function () {
$(".nav-element.parent").off().on('click', function(e) {
el = $(this)
if ( getStatus(el) ) {
$(this).toggleClass("active")
$(this).find(".nav-child-element").slideToggle()
} else {
$(".nav-element.parent").removeClass("active")
$(".nav-child-element").slideUp();
$(this).addClass("active")
$(this).find(".nav-child-element").slideDown();
}
})
});
而不是模糊事件,我会监听keydown,检查它是否为tab,然后运行我想要的代码。它允许我访问element.addEventListener('keydown', (event) => {
if (event.keyCode !== 9) return;
if (!event.shiftKey) {
event.preventDefault();
YOURTARGET.focus();
}
});
。