2014-07-26 18 views
7

In einer Shiny-Anwendung ist es möglich, eine Bindung zu haben, die auf welche Taste ein Benutzer drückt?R Shiny Tasteneingabe Bindung

Ich bin nicht allzu vertraut mit JavaScript, aber ich bin auf der Suche nach so etwas wie:

window.onkeydown = function (e) { 
    var code = e.keyCode ? e.keyCode : e.which; 
    alert(code); 
}; 

, wo der Schlüssel eingegeben wird dann in server.R verwendet werden, zB:

shinyServer(function(input, output) { 

    output$text <- renderText({ 
    paste('You have pressed the following key:', input$key) 
    }) 

    # ... 

}) 

Antwort

18

Sie können einen Listener für Tastendrucke hinzufügen. Die Shiny.onInputChange kann verwendet werden, um den Schlüssel zu einer glänzenden Variable gedrückt zu binden:

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

    output$results = renderPrint({ 
    input$mydata 
    }) 
} 
)) 

für keydown Ereignisse können Sie ersetzen:

tags$script(' 
    $(document).on("keydown", function (e) { 
     Shiny.onInputChange("mydata", e.which); 
    }); 
    ') 
+0

genau das, was ich suchte, danke! – reinholdsson

+1

Glücklich zu helfen. Sie müssen sich nach einer Tabelle mit Tastaturcodes umsehen. – jdharrison

+0

Das war sehr hilfreich. Es scheint jedoch, dass es nicht funktioniert mit Pfeilen, Shift-Tasten usw. ... und einen Buchstaben mit Kappen ein oder aus zu tippen bringt ein neues Ergebnis. Es scheint, dass es wirklich beobachtet, was "Charakter" eingegeben wird. Irgendeine Art, es mit Pfeilen arbeiten zu lassen? –