Using enter key with action button in R Shiny

前端 未结 4 1778
挽巷
挽巷 2020-12-08 14:41

I am trying to write a javascript function to extend the R shiny action button demo. I would like the user to be able to enter a number by both clicking the action button an

4条回答
  •  死守一世寂寞
    2020-12-08 15:23

    Here is my best solution. I don't really like it tbh, but at least it works.

    library(shiny)
    # This is a demo app to test a key binding on an actionButton
    # Uncommenting the info item (on both UI and server) will display internal stuff
    runApp( 
      list(
        #############################################
        # UI 
        #############################################
        ui = bootstrapPage(
          textInput ("myinput", label = "Write something here"),
          tags$script('
            $(document).on("keydown", function (e) {
            Shiny.onInputChange("lastkeypresscode", e.keyCode);
            });
            '),
          actionButton("GO", "Lancer le matching !"),
          # verbatimTextOutput("info"),
          verbatimTextOutput("results")
        ), 
    
        #############################################
        # SERVER 
        #############################################
        server = function(input, output, session) {
    
          # There are state variables for the input text and GO button
          curr.val <- "" # Corresponds to the current displayed input$myinput
          curr.go  <- 0  # Corresponds to the last known GO value (integer)
    
          lastEvent <- reactive({
            # Is reactive to the following events
            input$GO
            input$lastkeypresscode
    
            # Decide which action should be taken
            if(input$GO > curr.go) {
              # The user pushed the GO actionButton, so take action
              action <- 1
              curr.go <<- input$GO
            } else if(input$lastkeypresscode == 13) {
              # The user pressed the Enter key, so take action
              action <- 1
            } else {
              # The user did anything else, so do nothing
              action <- 0
            }
    
            return(action)
          })
    
          output$results = renderPrint({
            if(lastEvent() == 1) {
              curr.val <<- isolate(input$myinput)
            }
            curr.val
          })
    
          # output$info = renderText({
          #   paste(curr.val, curr.go, input$lastkeypresscode, sep = ", ")
          # })
        }
      )
    )
    

提交回复
热议问题