我正在尝试检测用户何时在输入文本输入时点击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
并在按住它的同时,将焦点放在输入上。您现在将看到连续的一系列警报!
答案 0 :(得分:0)
因为您有两个事件绑定到输入,如下所示。
一个内部
$("input").keyup(function(e){
和其他内部
$(document).on("keyup",function(e) {
所以首先你需要使用e.stopPropagation();