注册重复键盘按下闪亮

时间:2016-03-06 19:58:24

标签: r shiny

我正在尝试构建一个捕获键盘按下的应用程序,但是我遇到的问题是,如果连续使用相同的键盘按下那么闪亮就没有&#39 ; t似乎注册输入。想知道是否有解决方法。

,例如,这就是我的意思。

library(shiny)
runApp( list(ui = bootstrapPage(
    verbatimTextOutput("results"),
    tags$script('
    $(document).on("keydown", function (e) {
       Shiny.onInputChange("down", e.which);
    });'),
    tags$script('
    $(document).on("keyup", function (e) {
                Shiny.onInputChange("up", e.which);
                });')
)
, server = function(input, output, session) {

    output$results = renderPrint({
        print(rnorm(1))
        c(input$down, input$up)
    })
}
))

键入/释放键盘上的不同字符会生成新输入,因此在发生这些事件时会调用随机数生成器。但是,输入'g' 'g' 'g'只会记录第一次上下击键而忽略其余的击键。

1 个答案:

答案 0 :(得分:5)

Shiny.onInputChange仅在js对象引用更改时作出反应,但是您编写js的方式将值重新分配给同一事物,多次按下同样的关键。 一个丑陋的解决方法可能就是让变量成为按键和数组中的随机浮点数。

library(shiny)
runApp( list(ui = bootstrapPage(
  verbatimTextOutput("results"),
  tags$script('
              $(document).on("keydown", function (e) {

              Shiny.onInputChange("down", [e.which,Math.random()]);
              });'),
    tags$script('
                $(document).on("keyup", function (e) {

                Shiny.onInputChange("up",  [e.which,Math.random()]);
                });')
)
, server = function(input, output, session) {

  output$results = renderPrint({
    print(rnorm(1))
    c(input$down[1], input$up[1])
  })
}
  ))

消除生成随机数的需要可能更有效,并传回一些可能有用的信息。例如,使用timestamp属性,您可以在按键上实现一些过滤。

library(shiny)
runApp( list(ui = bootstrapPage(
  verbatimTextOutput("results"),
  tags$script('
          $(document).on("keydown", function (e) {

          Shiny.onInputChange("down", [e.which,e.timeStamp]);
          });'),
tags$script('
            $(document).on("keyup", function (e) {

            Shiny.onInputChange("up",  [e.which,e.timeStamp]);
            });')
)
, server = function(input, output, session) {

  output$results = renderPrint({
    print(rnorm(1))
    c(input$down[1], input$up[1])
  })
}
  ))