Javascript无法在IE 11中的onblur函数中访问键盘事件,但不能访问IE 9

时间:2014-11-06 14:43:58

标签: javascript jsp dom

我目前遇到了尝试使用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!');
    }
}

3 个答案:

答案 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(); } });