【问题标题】:Javascript: triggering button on keydownJavascript:在keydown上触发按钮
【发布时间】:2015-03-31 20:00:34
【问题描述】:

我正在构建一个音乐电子学习工具,并希望使用键盘触发一个输入按钮,该按钮将播放指定的音符。就像钢琴一样!除了这个会让你的耳朵流血,但这不是重点。

手动按下按钮时 onclick() 本身可以工作,但事实证明绑定到键盘很困难。

HTML:

<input type="button" id="pgC" value="C" onClick="pgC()">
<input type="button" id="pgCsharp" value="C#" onClick="pgCsharp()">

绑定到键盘的脚本:

$(function() {
$(document).keydown(function(e) {
    switch (e.keyCode) {
    case 65:
        $('#pgC')[0].onclick();
        break;
    case 87:
        $('#pgCsharp')[0].onclick();
        break;
    }
 });
});

我试图从中修改:Binding Keyboard to Onclick Event

我的理解是$('#pgC')[0].onclick();应该找到分配的id,并根据按下的键触发onclick,在这种情况下是小写的“a”。

非常感谢任何和所有帮助! :D

【问题讨论】:

  • 究竟是什么不起作用?它似乎工作......
  • @nicael 问题是当我按下分配的键时没有任何反应。
  • 我检查过 - 你选择的效果很好。

标签: javascript jquery keydown


【解决方案1】:

这是一个处理简单案例的答案,但您需要考虑其他内容,例如如果用户想演奏和弦等怎么办?

您可以在此处查看简单演示并对其进行编辑以满足您的需求,http://plnkr.co/edit/ZfcHdM?p=preview

但是,在开始您当前的道路之前,只需在 GitHub 或网络上四处看看。我感觉有人已经完成了你想要完成的事情。

这是一个sn-p。

(function() {
  var KeyboardSimulator = (function () {
    function KeyboardSimulator() {
    }

    KeyboardSimulator.prototype.keyPressed = function (key) {
        // Add some logic to check if the particular key is registered.
        console.log('The musician pressed the "' + key + '" key.');
    };

    return KeyboardSimulator;
  })();

  $(document).ready(function() {
    var simulator = Object.create(KeyboardSimulator.prototype);
    var intrumentSimulatorContext = $('#instrumentSimulator');

    intrumentSimulatorContext.on('click', '.key', function(e) {
      var key = $(this).val();

      e.preventDefault();
      simulator.keyPressed(key);
    });

    $(document.body).on('keydown', function(e) {
      var key = String.fromCharCode(e.keyCode).toUpperCase(),
        keyMap = {
          // keyboard key -> musical note
          'A': 'C',
          'W': 'CSharp',
          'S': 'D'
        }

      if (key in keyMap) {
        $('#pg' + keyMap[key]).trigger('click');
      }

    })
  });
})();

【讨论】:

  • 如果可以的话,我会投票!偶然性将是一个挑战,但这非常适合炫耀主要音阶和其他教堂音阶。
  • @Kyrre,你不需要投票,你可以接受答案;)
  • 好吧,它并不能完全回答我的问题。我正在寻找的是一种制作 a=C、w=C#、s=D 等的方法。您的解决方案有效,但它并不是我想要的。不过,这里的注意力似乎已经消失了,所以我会给你积分。
  • @Kyrre,我更新了演示以反映您上次评论中的需求。
  • 圣烟,这很酷。你激励我继续学习,非常感谢:D
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多