【问题标题】:How to get keypress of the star above the numbers如何获得数字上方星星的按键
【发布时间】:2012-04-08 03:11:31
【问题描述】:

问题:如何获得数字上方的星星

我的FIDDLE 目前没有检测到键盘上数字行上方的 * - 只有数字小键盘上的 *...

在我的键盘上是 shift-3 所以 keyCode 51 + shift。无论我点击什么来获取它,我如何只测试 * ?

【问题讨论】:

  • 使用String.fromCharCode 转换event.which 仅在keypress 事件中可靠。
  • 我看到它正在检测*。但问题是它还将8 检测为*
  • @RobW 但这仅在所有键盘为键上的字符返回相同数字时才有效。在我的情况下 51 是 * 而在美国是 56
  • @mplungjan 不,它不起作用。 keydownkeyup 事件返回按键的代码,not 用于按下的字符。 8* 将返回相同的键码 -> event.which。正如我之前提到的,只有keypress 事件可以依赖。
  • @RobW 所以请发布一个例子

标签: jquery events keyboard


【解决方案1】:

我不太确定您发布的键码。 使用此代码,当我按 * 时,我得到 56

<script type="text/javascript">
    document.addEventListener('keydown', function( event ) { 
             console.log(event.keyCode); });
</script>

【讨论】:

  • 我知道。我在瑞士德语键盘上得到 51 - 所以不是答案。
【解决方案2】:

keydownkeyup 事件对于检测特定字符是不可靠的,因为这些事件的 event.which 属性不是字符代码。

必须使用keypress 事件。按下某个键时,此事件可能会触发多次。因此,在按下所需键时设置一个标志,并删除 keyup 上的标志。

演示:http://jsfiddle.net/xHnTD/

function something_to_do() {
    // This function is fired when * is pressed.
    $('<div>Pressed *!</div>').appendTo('body')
}
$('body').keypress(function(e) {
    var $this = $(this);
    if (e.which === 42) { // '*'.charCodeAt(0) === 42
        if (!$this.data('rw_star_pressed')) {
            $this.data('rw_star_pressed', true);
            something_to_do();
        }
    }
}).keyup(function() {
    $(this).removeData('rw_star_pressed');
});

【讨论】:

  • 小提琴在 OSX 上我得到 56,8 在我的 8 以上的 * 上,在工作中会高于 3。我在数字键盘上得到 106。似乎您在此处发布的代码有效。我确实需要看看我是否也按下了 ctrl-*
  • @mplungjan 糟糕,演示链接错误。编辑答案:p
  • 你也可以加 ctrl-* 吗?
  • 我找到了 e.ctrlKey,所以不需要解决这个问题。我会看看另一个问题
  • 我在这里接受了你的。我喜欢另一个问题中给出的 next() 方法。谢谢
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多