首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定输入keyEvent是否添加或删除了什么

确定输入keyEvent是否添加或删除了什么
EN

Stack Overflow用户
提问于 2014-01-29 08:19:42
回答 4查看 111关注 0票数 0

假设我在输入字段上使用jQuery捕获一个keyup事件。现在,我正在对事件做各种事情,例如,响应选项卡或输入键。现在我想确定一个键,如制表符,控制键,alt键,移位键,或者是一个真正改变输入的键,比如字母,数字,标点符号等等。

有什么办法能确定这个吗?如何确保检查任何地方的任何用户都可以按下的所有正确的密钥?

我希望我的问题是清楚的。

编辑1:

好吧,我在回答问题的时候有点快了。仍然有一个问题。到目前为止我的解决方案(JSFiddle):

代码语言:javascript
运行
复制
$('input').keyup(function(e) {
    var lastValue = '';
    if(typeof $(this).attr('data-last-value') != 'undefined' && $(this).attr('data-last-value') != '') {
        lastValue = $(this).attr('data-last-value');
    }

    if(lastValue != $(this).val()) {
        //This is what I wanted.
    }

    $(this).attr('data-last-value', $(this).val());
});

问题:例如,如果用户在输入中输入“hello”,然后选择“h”并按h键,脚本就不会将其识别为所需的按键之一,因为该值没有被更改。有办法避免这种行为吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-29 08:34:28

可能的解决方案之一是在更改输入之前节省输入的长度,并在某些情况下检查新的长度,即:

代码语言:javascript
运行
复制
var inputsLength = {};

$(window).keydown(function (e){
  var input = e.eventTarget,
      name = input.name,
      oldLength = inputsLength[name];

  if (!oldLength) {
    inputsLength[name] = input.length
  }

  if (oldLength !== input.length) {
    //something change
  } else {
    //everything is the same
  }

  if (e.ctrlKey) alert("control");
});

更新问题的替代解决方案是使用“输入”事件,该事件只捕获在这种情况下真正想要的内容。

代码语言:javascript
运行
复制
$(window).on('input', function(e) {
    //Do what you need
});

请记住,这不适用于IE < 9,在IE9中也有一点小问题。但是,为了满足您的需要,我认为这应该是一个很好的选择。

票数 1
EN

Stack Overflow用户

发布于 2014-01-29 08:38:48

简而言之,KeyCodes。

代码语言:javascript
运行
复制
$('element').keyup(function (e) {
    var event = e || window.event; //for firefox mainly
    switch (e.keyCode) {
        case 13:
            //do something here (keycode 13 is enter)
            break;
        //continue for all keycodes you are checking for
    }

    //alternatively
    var modKeys = [69, 70, 71]; //ect... (keys which will modify the input)
    var otherKeys = [9, 13, 16]; // ect... (keys which wont)

    if ($.inArray(e.keyCode, modKeys)) {
        //code for modification key
    } else if ($.inArray(e.keyCode, otherKeys)) {
        //code for non-modification keys
    }
});

编辑:获取密钥列表:http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

票数 1
EN

Stack Overflow用户

发布于 2014-01-29 08:29:34

代码语言:javascript
运行
复制
$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});

修饰符键列表:

代码语言:javascript
运行
复制
e.ctrlKey
e.altKey
e.shiftKey
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21425577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档