Javascript - 检查用户是否正在编辑文本输入

5

您能检查用户是否在编辑文本字段而没有编辑任何内容吗?我希望当用户在文本字段中按下回车键时调用一个函数。我知道使用表单可以实现该功能。

咖啡:

$(document).keyup (e) -> 
  func()  if e.which is 13 and "user is in input field"

Javascript:

$(document).keyup(function(e) {
    if(e.which == 13 and "user is in input field") {
        func();
    }
});

用户正在输入框中。在JavaScript中,这是什么意思? - Harsha Venkataramu
这就是问题,哈哈。 - hansottowirtz
你不想在它周围放一个表单有什么目的? - Armel Larcier
用图片制作提交按钮比使用需要进行样式设计的按钮更容易。 - hansottowirtz
5个回答

3
我会使用jQuery检查输入字段是否处于焦点状态:

我会使用jQuery检查 在焦点 的输入字段:

var selectedInput = null;
$(function() {
    $('input, textarea, select').focus(function() {
        selectedInput = this;
    }).blur(function(){
        selectedInput = null;
    });
});

3
您可以使用jQuery的.on()方法创建一个委托事件处理程序,该处理程序绑定到document,但仅在目标元素匹配您选择的选择器时调用处理函数:
$(document).on('keypress', 'input[type="text"],textarea', function(e) {
    if (e.which === 13) {
        // do something here
    }
});

这与Musa的答案类似,除了jQuery会自动为您执行.is()测试。

请注意第二个参数中的选择器是'input[type="text"],textarea',以排除非文本输入。


2
我会像Yair Nevet一样使用焦点状态,因为你可能需要在其他事件回调中使用该测试,比如onbeforeunload。
"user is in a field or something" = $( "input:focus,textarea:focus" ).length > 0

jQuery文档指出:“如果您正在查找当前聚焦的元素,则 $(document.activeElement) 将检索它,而无需搜索整个DOM树。”
所以也许
$( document.activeElement ).filter('input,textarea').length > 0

所以:
$(document).keyup(function(e) {
    if(e.which == 13 and $( document.activeElement ).filter('input,textarea').length > 0) {
        func();
    }
});

jQuery文档


如果焦点在任何控件(包括按钮、选择元素等)上,那么两个选项都会返回true,不是吗? - nnnnnn
我只是不喜欢按键事件的方法。 - Armel Larcier
“我只是不喜欢按键事件的方法” - 也许是这样,但如果用户在没有使用按键事件的情况下按下回车键,那么测试起来会有些困难... - nnnnnn
我在谈论焦点状态检测。这个测试可能对其他事件回调函数(如onbeforeunload)也有用。 - Armel Larcier

1

试试这个

$('input').keyup(function(e) {
    if (e.which == 13) {
        // do whatever you want
    }
});

那不是我认为的问题。 - Armel Larcier
@ArmelLarcier:是吗?怎么了? - Harsha Venkataramu
@ArmelLarcier - “我想要一个函数在用户处于文本字段并按下回车键时被调用。” - nnnnnn
是的,它只应在用户编辑文本字段时调用。(当他点击它时) - hansottowirtz
@ArmelLarcier:写一个焦点的必要性是什么! - Harsha Venkataramu
显示剩余3条评论

1
您可以使用 target 元素来检查哪个字段处于焦点状态。
$(document).keypress(function(e) {
    if(e.which == 13 && $(e.target).is('input,textarea')) {
        func();
    }
});
$(e.target).is('input,textarea')会返回true,如果触发键盘按下事件的元素是文本框。
咖啡:
$(document).keypress (e) ->
   func()  if e.which is 13 and $(e.target).is("input,textarea")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接