2013-02-21 307 views
-1
$(document).ready(function(){ 
    $(document).bind('keydown',function(e){ 
     key = e.keyCode; 
     if(key == 37){ 
      left(); 
     }else if(key == 38){ 
      up(); 
     }else if(key == 39){ 
      right(); 
     }else if(key == 40){ 
      down(); 
     } 
    }); 
      alert("Hi"); 
}); 

“嗨”只发出一次提醒,我如何在启动后跳出$(document).bind?可能是像break;return;

+0

为什么你期望它不止一次提醒?当DOM准备就绪时,它会提醒一次,就是这样。它与keydown事件无关。 – elclanrs 2013-02-21 04:18:05

+0

我不明白你的问题。 'break'和'return'都是有效的javascript命令。 – Barney 2013-02-21 04:18:24

+0

你想做什么? “hi”警告一次,因为'$(document).ready()'在文档dom被加载并准备好时触发一次。也许你想把警报放在'keydown'事件处理程序中? – deadlock 2013-02-21 04:21:08

回答

6

“嗨”只会发出一次警告,因为它不在​​处理程序中......它在ready处理程序中。

$(document).ready(function(){ 
    $(document).bind('keydown',function(e){ 
     key = e.keyCode; 
     if(key == 37){ 
      left(); 
     }else if(key == 38){ 
      up(); 
     }else if(key == 39){ 
      right(); 
     }else if(key == 40){ 
      down(); 
     } 
    });// keydown handler ends here 
      alert("Hi"); 
}); 

另外,作为一个侧面说明,请尝试使用console方法而不是alert(),因为它可以更好的描述,它的无阻塞。

UPDATE

我可以从下面的评论你,什么在你的代码实际发生相当混乱看看......所以,让我们通过它一步。

$(document).ready(function(){ 

在这里,您绑定了一个处理程序到DOM ready事件。当浏览器完成构建文档结构时,这会被触发。它没有考虑到需要加载的任何外部资产。

$(document).bind('keydown', function(e){ 

现在我们将一个处理程序绑定到​​事件。当​​事件冒泡达到document级别时,该函数内的任何内容(以及中只有内的函数)将被执行。

key = e.keyCode; 

您分配事件的一个key变量keyCode财产。我建议使用关键字var作为前面的维护范围。 var key = e.keyCode;

if(key == 37){ 
    left(); 
}else if(key == 38){ 
    up(); 
}else if(key == 39){ 
    right(); 
}else if(key == 40){ 
    down(); 
} 

现在你通过一系列if/else块跳跃,并呼吁leftuprightdown功能,如果先前声明key变量匹配您的条件之一。

}); 

这是​​处理器的END

alert("Hi"); 

在这里,你alert()消息。这是在​​处理程序被绑定之后直接完成的,但不是在每个处理程序或任何处理程序执行之后。此行作为文件ready处理程序的一部分执行一次。

}); 

这是文件末尾的ready句柄。

+0

好吧更正,所以即时通讯想知道如何摆脱keydown处理程序,因为它循环遍历检查keydowns,但我想突破并再次进入警戒 – Caveman 2013-02-21 04:22:54

+2

@Caveman - 你是显然困惑。 'keydown'不会_loop_,它会在每次按下_key_时执行_down_。文档准备就绪后,您的当前代码将执行**一次**。它将一个keydown函数绑定到文档,但直到用户按下某个键时才会触发此事件处理程序。你究竟想要做什么? – jahroy 2013-02-21 04:24:36

+0

要继续使用@jahroy所说的话,'keydown'处理程序只有在按下(并保持)键时才会循环。 **仅处理程序中的**代码被执行。 – ahren 2013-02-21 04:26:26

0

我想,你不想多次使用​​。

您可以使用onoff()一样,

$(document).ready(function(){ 
    $(document).on('keydown',function(e){ 
     key = e.keyCode; 
     if(key == 37){ 
      left(); 
     }else if(key == 38){ 
      up(); 
     }else if(key == 39){ 
      right(); 
     }else if(key == 40){ 
      down(); 
     } 
     $(document).off('keydown'); 
    });// keydown handler ends here 
      alert("Hi"); 
}); 

或者你可以使用one()只触发一次。

$(document).ready(function(){ 
     $(document).one('keydown',function(e){ 
      key = e.keyCode; 
      if(key == 37){ 
       left(); 
      }else if(key == 38){ 
       up(); 
      }else if(key == 39){ 
       right(); 
      }else if(key == 40){ 
       down(); 
      } 
     });// keydown handler ends here 
       alert("Hi"); 
    }); 
+0

已经有这种方法的时候是非感性的。 '.one()' – ahren 2013-02-21 04:39:49

+0

你应该等待编辑:)。可能是他想在一定条件下跑超过1次或“关闭”。 – Jashwant 2013-02-21 04:40:12

相关问题