检测Javascript中的特殊按键

检测Javascript中的特殊按键,javascript,jquery,html,Javascript,Jquery,Html,我有一个输入框,想在按键时调整数值 'keypress .comment-input': 'onCommentInputKeyBlur', 当按下一个键时,一个类被添加到html元素以反映更改 onCommentInputKeyBlur: function(ev) { var $form = $('#comment-submit'); if (ev.which) { $form.addClass('focused');

我有一个输入框,想在按键时调整数值

'keypress .comment-input': 'onCommentInputKeyBlur',
当按下一个键时,一个类被添加到html元素以反映更改

      onCommentInputKeyBlur: function(ev) {
        var $form = $('#comment-submit');
        if (ev.which) {
            $form.addClass('focused');
        } else if (!$(ev.currentTarget).val()) {
            $form.removeClass('focused');
        }
    },
但是,这不会检测到按下的特殊键(即当用户按下ctrl+v进行粘贴时,不会检测到,因此格式错误)

使用keyup和keydown可以解决一半的问题,但在短时间内格式化是错误的:

Keydown->在通过按键输入实际值之前,该值不应更改,但当按下ctrl而不是等待第二个键时,该值会立即更改

Keyup->new值在等待键实际释放时短暂粘贴到上一个值上


有没有更好的方法来解决这个问题?理想情况下,我希望检测输入的键是否确实产生值,而不仅仅是一个特殊键

查看onchange事件。它得到了很好的支持,可能会解决您的问题。

此功能的最终目标是什么?也许有更好的办法


如果您坚持通过按键事件执行此操作,则只需检查event.keyCode并过滤掉一些不会改变任何内容的按键代码,如shift、control、alt。

每当按下一个键时,就会触发
keypress
事件。您是否询问如何确定用户按下的键是否有效?按下control(或类似的特殊键)时,keypress事件未注册。但是,keyup和keydown可以识别它。这将告诉您不同的浏览器如何响应不同的键事件:。你说得对-看起来
ctrl
不会触发按键事件。你能提供更多的代码来显示你的尝试吗?我仍然不确定你要处理哪些具体事件。