确定输入keyEvent是否添加或删除了某些内容

时间:2014-01-29 08:19:43

标签: jquery events input onkeyup

假设我在输入字段上使用jQuery捕获keyup事件。现在我正在对事件做各种事情,例如对选项卡做出反应或输入键。现在我想确定是否按下了tab,control,alt,shift这样的键或者实际改变输入的键,如字母,数字,标点符号等。

有没有办法确定这个?如何确保检查任何用户可以按的所有正确的按键?

我希望我的问题很明确。

编辑1:

嗯,关闭这个问题,我有点快。还有一个问题。到目前为止我的解决方案(JSFiddle):

$('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键,则脚本不会将其识别为所需的按键之一,因为该值不是改变。有没有办法绕过这种行为?

4 个答案:

答案 0 :(得分:1)

也许可能的解决方案之一是在更改输入之前保存输入长度,并在某些事件中检查新的长度,即:

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");
});

更新后问题的替代解决方案是使用"输入"在这种情况下仅捕获您真正想要的事件。

$(window).on('input', function(e) {
    //Do what you need
});

P.S。请记住,这不起作用IE< 9并且在IE 9中是一个小小的车。但是根据你的需要,我认为它应该是一个很好的选择

答案 1 :(得分:1)

简而言之,KeyCodes。

$('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

答案 2 :(得分:0)

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});

修饰键列表:

e.ctrlKey
e.altKey
e.shiftKey

答案 3 :(得分:0)

试试这个

<input type="text" id="txtboxToFilter" />

(document).ready(function() {
    $("#txtboxToFilter").keyu[(function(event) {

        if (event.ctrlKey == true)
            alert("control key pressed");
        //or you can do something like this also using key codes
        if (event.keyCode == 9)
            alert("tab key pressed");

        }

    });
});

JavaScript Key Codes