保持keydown时更改字符

时间:2014-10-25 20:13:34

标签: javascript jquery

我正在尝试一种简单的方法来在按住键超过1秒时更改输入字段中的字符。例如,按住 a 会将字符更改为á。 我想要做的确切事情可以在fluencia.com上看到。 如果角色再保持一段时间,也需要能够改变角色。

到目前为止,我所做的就是检测使用以下代码保存的密钥:

count = 0;
$(document).bind('keypress', function(e){

    keyisdown = false;
    key = e.which
        if (e.which === key) {
            keyisdown = true;
            count ++;
            if(count>1){

            }
        }
    }).bind('keyup',function(){
        keyisdown = false;
    count = 0;
    console.log('key up');
    });

由于 亚当

2 个答案:

答案 0 :(得分:0)

这应该用于密钥" a" ..您需要查找密钥

var fired = false;
$(document).on("keydown", function(e) {

    if (e.keyCode == 65) {
        var timer = setTimeout(function() {
            if (!fired) console.log('its held');
            fired = true;
        }, 1000);

        $(document).on("keyup", function() {
            clearTimeout(timer);
        });
    }
});

小提琴 - http://jsfiddle.net/0a9rftt2/

答案 1 :(得分:0)

在上面的Graham T的帮助下,我有点玩耍,我想出了以下内容:

var fired = false;
var keycode = null;
var key = null;

$("#loginEmail").on("keypress", function(e) {
   keycode = e.which;
   key = String.fromCharCode(keycode);
});


$("#loginEmail").on("keydown", function(e) {
    var s = this.value;
    var str = this.value;

    if (e.keyCode == 65) {

        var timer = setTimeout(function() {
            if (!fired) console.log('its held');
            fired = true;
            if(fired){
                s = $("#loginEmail").val();
                str = s.substring(0, s.length - 1);
                replacewith = 'á';
                str = str+replacewith;
                $("#loginEmail").val(str);
            }
        }, 500);

        $(document).on("keyup", function() {

            clearTimeout(timer);
            fired = false;
        });
    }
});

尚未清理。我不得不使用keypress来获取真正的字符(大写或不大写),然后使用keydown来检测被按下的键。