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

时间:2013-12-15 19:59:02

标签: javascript function input coffeescript keypress

您可以检查用户是否正在编辑文本字段而不进行任何编辑吗?我希望在用户处于文本字段并按下回车时调用函数。我知道它适用于表格。

咖啡:

$(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();
    }
});

5 个答案:

答案 0 :(得分: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',以便排除非文本输入。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

试试这个

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

答案 3 :(得分:1)

我会像Yair Nevet那样使用焦点状态,因为你可能需要在onbeforeunload等其他事件回调中进行测试。

"user is in a field or something" = $( "input:focus,textarea:focus" ).length > 0

jQuery doc说明 “如果您正在寻找当前关注的元素,$(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 doc

答案 4 :(得分:0)

您可以使用目标元素来检查哪个字段是焦点

$(document).keypress(function(e) {
    if(e.which == 13 && $(e.target).is('input,textarea')) {
        func();
    }
});
如果生成keypress事件的元素是文本框,则

$(e.target).is('input,textarea')返回true。

咖啡:

$(document).keypress (e) ->
   func()  if e.which is 13 and $(e.target).is("input,textarea")