在R Shiny中触发响应式流程的键盘快捷键?

3

在Shiny应用程序(Windows环境下)中,例如使用F7Q来触发一个反应流是否可能?这个问题提供了使用键盘输入交替选项卡的代码,但我想启动反应流。例如,每次用户在键盘上按下Q时,将“触发”一个按钮。

2个回答

13

以下是基于这个答案的示例:

library(shiny)

runApp(shinyApp(
  ui = fluidPage(
    tags$script(HTML("$(function(){ 
      $(document).keyup(function(e) {
      if (e.which == 81) {
        $('#button').click()
      }
      });
      })")),
    actionButton("button", "An action button"),
    textOutput("text")),
  server=function(input, output, session) {
    output$text <- renderText({input$button})
  }
))

您可以使用此页面查找要在javascript代码中使用的按键码。

在此示例中,如果按下q键,则会点击具有id button的元素。


纯金。跟进:有没有办法检测 Ctrl+q?我知道有类似 e.ctrlKey 的东西,但我不知道如何实现它。 - InspectorSands
1
你可以参考这个问题的链接:https://dev59.com/Fmgv5IYBdhLWcg3wXPot。 - NicE
我正在尝试模仿你的方式为 downloadButton() 启用快捷键,但我失败了,你有什么建议吗?谢谢! - Negrito

1
通常我会将这个功能添加到一个外部的js文件中,并使用tags$head(tags$script(src = "custom.js"))引用它。根据需要选择keydown或keyup来触发函数。添加e.preventDefault();以阻止默认行为被触发,例如保存网页。
/* js for ctrl(PC) or cmd(mac) plus S */
$(document).keydown(function(e) {
  if ((e.ctrlKey || e.metaKey) && e.which == KEYCODE.s) {
    $('#my_button').click();
    e.preventDefault();
  }
});

我有一个 keycode.js 文件,我首先引用它,其中列出了按键代码,这样我就不必一直查找它们了。

var KEYCODE = {
    'backspace' : 8,
    'tab' : 9,
    'enter' : 13,
    'shift' : 16,
    'ctrl' : 17,
    'cmd' : 224,
    'alt' : 18,
    'pause_break' : 19,
    'caps_lock' : 20,
    'esc' : 27,
    'space' : 32,
    'page_up' : 33,
    'page_down' : 34,
    'end' : 35,
    'home' : 36,
    'left_arrow' : 37,
    'up_arrow' : 38,
    'right_arrow' : 39,
    'down_arrow' : 40,
    'insert' : 45,
    'delete' : 46,
    '0' : 48,
    '1' : 49,
    '2' : 50,
    '3' : 51,
    '4' : 52,
    '5' : 53,
    '6' : 54,
    '7' : 55,
    '8' : 56,
    '9' : 57,
    'equal' : 61,
    'plus' : 61,
    'minus' : 173,
    'underscore' : 173,
    'a' : 65,
    'b' : 66,
    'c' : 67,
    'd' : 68,
    'e' : 69,
    'f' : 70,
    'g' : 71,
    'h' : 72,
    'i' : 73,
    'j' : 74,
    'k' : 75,
    'l' : 76,
    'm' : 77,
    'n' : 78,
    'o' : 79,
    'p' : 80,
    'q' : 81,
    'r' : 82,
    's' : 83,
    't' : 84,
    'u' : 85,
    'v' : 86,
    'w' : 87,
    'x' : 88,
    'y' : 89,
    'z' : 90,
    'left_window' : 91,
    'right_window' : 92,
    'select_key' : 93,
    '0n' : 96,
    '1n' : 97,
    '2n' : 98,
    '3n' : 99,
    '4n' : 100,
    '5n' : 101,
    '6n' : 102,
    '7n' : 103,
    '8n' : 104,
    '9n' : 105,
    'multiply' : 106,
    'add' : 107,
    'subtract' : 109,
    'decimal_point' : 110,
    'divide' : 111,
    'f1' : 112,
    'f2' : 113,
    'f3' : 114,
    'f4' : 115,
    'f5' : 116,
    'f6' : 117,
    'f7' : 118,
    'f8' : 119,
    'f9' : 120,
    'f10' : 121,
    'f11' : 122,
    'f12' : 123,
    'num_lock' : 144,
    'scroll_lock' : 145,
    'semicolon' : 186,
    'equal_sign' : 187,
    'comma' : 188,
    'dash' : 189,
    'period' : 190,
    'forward_slash' : 191,
    'grave_accent' : 192,
    'open_bracket' : 219,
    'backslash' : 220,
    'closebracket' : 221,
    'single_quote' : 222
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接