0

我试图检测用户何时在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并在按住它的同时将焦点放在输入上。您现在将看到一系列连续的警报!

4

1 回答 1

0

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

一个里面

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

和其他里面

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

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

于 2013-03-06T10:36:16.263 回答