检测按键在文本输入中输入

时间:2013-03-06 10:31:45

标签: javascript jquery events keydown keyup

我正在尝试检测用户何时在输入文本输入时点击Enter。只有当键的“向下”和键的释放都发生在文本输入中时,才会触发该事件。也就是说,如果事件在身体的其他部分按下Enter,则该事件不应该触发,然后将注意力集中在输入上并释放它。所以我尝试了以下内容:

<!DOCTYPE html>
<html>
<head>
<script src="jquery.js">
</script>
<script>
$(document).ready(function(e){
  $("input").keyup(function(e){
    if (e.which == 13 && $(this).attr("enter") == "1") { alert("Yep!"); }
  });
$("input").keydown(function(e) {
   if (e.which == 13) { $(this).attr("enter","1"); }
});
$(document).on("keyup",function(e) { if (e.which == 13) { $("input").attr("enter","0"); } });
});
</script>
</head>
<body>
<input type = 'text' enter = '0' />
</body>
</html>

但我有一个奇怪的问题。当我将注意力集中在输入之外并按Enter时,输入的属性enter将按预期保持0。但是当按键仍然按下时,如果我现在专注于输入,Firebug会将属性显示为1.因此,在此之后如果我释放该键,则会触发该事件。

谁能告诉我如何解决这个问题? keypress不起作用,所以如果你只需用

替换整个块
$("input").keypress(function(e){
    if (e.which == 13) { alert("Yep!"); }
  });

然后尝试这样做,单击输出以移除焦点,然后按Enter并在按住它的同时,将焦点放在输入上。您现在将看到连续的一系列警报!

1 个答案:

答案 0 :(得分:0)

因为您有两个事件绑定到输入,如下所示。

一个内部

$("input").keyup(function(e){

和其他内部

$(document).on("keyup",function(e) {

所以首先你需要使用e.stopPropagation();