繁体   English   中英

返回false后也不会显示警报框

[英]Alert box doesn't show even after return false

看到代码:

area.onkeydown = function(e){
    e = e || window.event;

    if(e.shiftKey && e.keyCode === 32){
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();

        // no alert here

        return false;
    }
};

在这里,代码有效,并且在按下Shift + Space时不会插入空格。 但是,一旦我插入alert ,它就无法工作,即插入了空格,警报框也没有显示。

area.onkeydown = function(e){
    e = e || window.event;

    if(e.shiftKey && e.keyCode === 32){
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();

        alert("typed"); // this alert doesn't show
        return false; // and space also gets insrted
    }
};

小提琴

我想念什么?

更新:

  1. 使用onkeyup将显示警报,但是会插入空格。
  2. 使用onkeypress不会插入空格,但是只要按键保持按下状态,警报就会保留。

因此,我想我没有办法使它正常工作。 正如Teemu所说

在您的拨弄下,该代码段可以使用或不使用alert()而无需在IE11(Win7)中打印空格。 FF失去了preventDefault()行为,尽管我可以看到警报。 在Chrome35中,警报仅在屏幕上闪烁,并且已打印空格。 (如果刷新速度足够快,您的情况是?) IE使用OS窗口显示警报,其他浏览器也有自己的实现,这似乎使事件处理混乱。

更新:我投票结束这个问题为离题,因为在最新的Chrome版本中,该问题不再能够按照描述的方式重现。 现在按Shift + Space将显示警报框,但不会插入任何空格。

我已将您的keydown更改为keyup

看到这个

area.onkeyup = function(e){}

尝试使用onkeypress而不是onkeydown

使用Keyup而不是keydown的原因如下:

 area.onkeyup = function(e){

演示版

按键

当用户首次按下键盘上的键时,keydown事件将发送到一个元素。 它可以附加到任何元素,但是事件仅发送到具有focus的元素。 在浏览器之间 ,可聚焦元素可以有所不同 ,但是表单元素可以始终获得焦点,因此是此事件类型的合理候选对象。

键盘输入

当用户释放键盘上的键时,keyup事件将发送到一个元素。 它可以附加到任何元素,但是事件仅发送到具有focus的元素。 在浏览器之间,可聚焦元素可以有所不同,但是表单元素可以始终获得焦点,因此是此事件类型的合理候选对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM