即使在返回false之后,警报框也不会显示

时间:2014-06-30 07:51:45

标签: javascript html stoppropagation

参见代码:

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
    }
};

FIDDLE

我错过了什么?

更新

  1. 使用onkeyup会显示提醒,但会插入一个空格。
  2. 使用onkeypress不会插入空格,但只要按键仍然按下,警报就会保留。
  3. 所以,我想我没办法让这个工作。正如Teemu puts it

      

    在您的小提琴中,无论是否在{1}}中都可以使用,而无需在IE11(Win7)中打印空格。虽然我可以看到警报,但FF会丢失alert()行为。在Chrome35中,警报仅在屏幕上闪烁并打印空间。 (如果闪存足够快,你的情况呢?) IE使用操作系统窗口显示警报,其他浏览器有自己的实现,这似乎搞乱了事件处理。

    更新:我投票决定将这个问题视为偏离主题,因为在最新的Chrome版本中,问题无法再按照其描述的方式再现。按Shift + Space现在显示警告框,但不插入任何空格。

3 个答案:

答案 0 :(得分:2)

我已将您的keydown更改为keyup

See this

area.onkeyup = function(e){}

答案 1 :(得分:2)

尝试使用onkeypress代替onkeydown

答案 2 :(得分:1)

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

 area.onkeyup = function(e){

Demo

<强> Keydown

  

当用户首次按下a时,keydown事件将发送到元素   键盘上的键。它可以附加到任何元素,但事件   仅发送到具有焦点的元素。可聚焦元素可以   浏览器之间的差异,但表单元素始终可以获得焦点   这种事件类型的合理候选人。

<强> Keyup

  

当用户发布密钥时,密钥事件将发送到元素   键盘。它可以附加到任何元素,但事件只是   发送到具有焦点的元素。可聚焦元素可以变化   浏览器之间,但表单元素总是可以获得焦点   这种事件类型的合理候选人。