Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript事件:如何在ALT+;输入NUM字符_Javascript - Fatal编程技术网

Javascript事件:如何在ALT+;输入NUM字符

Javascript事件:如何在ALT+;输入NUM字符,javascript,Javascript,我首先使用onKeyUp事件来检测文本框中的输入更改。但是,当用户使用ALT+Num输入法语字符时,事件不会检测到更改,直到我输入下一个字符 我应该使用哪个事件来检测特殊角色的变化。我试过一次,但似乎不起作用 我尝试过使用onkeypress事件,因为我注意到它在我释放ALT键后会触发它,但是即使释放ALT键后,onkeypress会被触发,并且您会看到重音字符,但是当我对inputbox使用this.value时,它只会在输入新的ALT+Num字符之前注册 例如:我输入了vidé,但搜索不会动

我首先使用onKeyUp事件来检测文本框中的输入更改。但是,当用户使用ALT+Num输入法语字符时,事件不会检测到更改,直到我输入下一个字符

我应该使用哪个事件来检测特殊角色的变化。我试过一次,但似乎不起作用

我尝试过使用onkeypress事件,因为我注意到它在我释放ALT键后会触发它,但是即使释放ALT键后,onkeypress会被触发,并且您会看到重音字符,但是当我对inputbox使用this.value时,它只会在输入新的ALT+Num字符之前注册

例如:我输入了vidé,但搜索不会动态查找vidé,而只查找vidé,因为在触发另一个键事件之前,尚未将é保存在-this.value中

因此,我想知道是否有办法模拟/发送一个按键来触发它。

有一个参考,在这个参考上看一看可能是个好主意,根据第2.1节,ALT应该在现代浏览器中生成一个keydown和keydup

我建议您使用jQuery或类似的库来缓解跨浏览器面临的问题。请看一看效果良好的概念证明


按键并不仅仅是由修改器按下触发的,所以这可能是一种方法,它允许您拾取输入的字符,而不是按下哪个键。编辑:在Fx中,按键似乎不是由修改器触发的,但我无法复制实际丢失的任何字符。

使用
keyup
。在用户释放ALT键之前,不会添加新字符,此时将触发
keyup
事件。

您需要绑定
onkeypress
,直到您完成输入ALT代码后才会触发

document.getElementById('input')。onkeypress=function(){
警报(“开火”);
}

终于明白了!!:D

下面是代码,不过是字符串转换事件。虽然在JSFIDLE上哪种代码不起作用,但代码仍然起作用:)

$('#i').keydown(函数(){
document.getElementById('j').value=“down”;
$('k').val($('i').val())
});
$('#i').keyup(函数(){
document.getElementById('j').value=“up”;
$('k').val($('i').val())
});
$('#i')。按键(函数(事件){
$('#k').val(String.fromCharCode(event.keycode));
});
$('#i')。更改(函数(){
document.getElementById('j').value=“change”;
});



使用ALT+NUM组合输入的字符将仅在
keyup
事件触发器之后添加到输入元素的值中,因此您将无法在该事件处理程序中读取它

为了解决此问题,您可以在读取输入元素的值之前设置ALT
keyup
事件的超时:

    $('input').on('keyup', function (e) {

        var _this = this;
        var ALT_KEY_CODE = 18;

        if (e.which == ALT_KEY_CODE) {
            setTimeout(function () {
                handleKeyup.call(_this , e);
            }, 1);
        } else {
            handleKeyup.call(_this , e);
        }

    });

    function handleKeyup (e) {
        // $(this).val() now holds the ALT+NUM char
    }

我想他指的是alt代码,比如我试过的。。但唯一的问题是,在按下另一个键之前,输入的新字符不会保存在此.value中。我正在做一个动态搜索,当用户输入字符列表更新时,事件正在触发,只是值不是您期望的值。您可以通过添加
console.log('fired')进行测试到事件。下面是我所做的简单演示。。。在顶部输入框中键入时,该值将复制到第二个框中。。如果在顶部输入alt+num,您将看到第二个键在按下另一个键之前不会更新。如何解决这一问题。我也尝试过这样做:使用所有其他关键事件,但仍然相同。。alt+num在按下另一个键之前不会被保存。在linux上的Chrome和Fx中,在第一个示例中,第二个输入总是落后一个,在新字符附加到值之前会触发按键,而不考虑修改器。但是,当我简单地按下并释放一个修改器时,Fx会触发一个额外的按键。所以不能重现你的问题。。对我来说,你的第二个例子在两种浏览器中都运行良好。不考虑修改器的精确副本。我使用的是挪威键盘,它有alt gr+num goodness。我也这么想?无法对任何有用的内容使用左alt