阻止对话框中的转义键传递给底层窗口

时间:2016-02-21 07:55:49

标签: javascript dialog event-handling

我有一个keyup的监听器,如果按下转义键,它将卸载我的javascript幻灯片。

window.addEventListener("keyup", this.escapekeyfn, false);

但是,在幻灯片放映中是使用window.print()打印图像的选项 - 但是如果用户在该对话框中按下转义符,则会将其传递给我的监听器并退出幻灯片。

任何方法可以在纯粹的js中阻止这种情况?我试图找到任何可以帮助我确定逃生来源的事件属性。 originalTarget看起来很有希望,但是一旦调用了一个对话框,原始目标就会更改为BODY。

听众

转义键处理(此基本代码)

slideshow.prototype.initslideshow = function(){
    _this = this
    ....
    this.escapekeyfn = function(e){ _this.escapekeycheck(e, _this)};
    window.addEventListener("keyup", this.escapekeyfn, false);        
    ....
}

打印按钮:

slideshow.prototype.printlink = function(){
    var _this = this;
    var a = document.createElement("a");
    var img = document.createElement("img");
    a.onclick = function(e){e.stopPropagation();window.print();return false};
    ....
}

slideshow.prototype.escapekeycheck = function(e, _this){
    if (e.stopPropagation) e.stopPropagation();
    if (e.keyCode == 27){
        _this.ssclose(e);
    }
}   

关闭功能:

slideshow.prototype.ssclose = function(e) {
    if (e.stopPropagation) e.stopPropagation();

    // stop listening for escape key
    window.removeEventListener("keyup", this.escapekeyfn);      
    return false;
}

1 个答案:

答案 0 :(得分:0)

我终于遇到了解决这个问题的方法。我将keyup更改为keypress

window.addEventListener("keypress", keypressFn, false);  

出于某种原因,keypress事件未发送到window对象,而keyup事件是打印对话框打开时。