2016-10-21 11 views
2

私は複数のアクションボタンを持っています。私は異なる選択入力を表示したいのですが、最後にクリックされたボタンIDを知りたいのですが、どうすればいいですか?私はそれが私にクリックされたすべてのボタンを示しR shiny - 最後にクリックされたボタンid

which(lapply(c(1:10), function(i) { input[[paste0("ActionButton", i)]]}) == TRUE) 

を使用する場合は、しかし、私は前のボタンをもう一度クリックを有効にするための最後のあった1知りたいです。どうやってやるの?私は光り輝いて新しく、すべての反応性/分離性の問題を理解しているかどうかわからないので、ヒントがあれば歓迎するだろう。

答えて

3

あなたは

$(document).on('click', '.needed', function() { 
           Shiny.onInputChange('last_btn',this.id); 
          }); 

例のようにsmthing JS

を追加することによってそれを行うことができます(あなたがないように制御したい場合はBTNするクラスneededを追加すべてbtn)

ui <- shinyUI(fluidPage(

    titlePanel("Track last clicked Action button"), 
    tags$head(tags$script(HTML("$(document).on('click', '.needed', function() { 
           Shiny.onInputChange('last_btn',this.id); 
          });"))), 

    sidebarLayout(
    sidebarPanel(
     actionButton("first", "First",class="needed"), 
     actionButton("second", "Second",class="needed"), 
     actionButton("third", "Third",class="needed"), 
     actionButton("save", "save"), 
     selectInput("which_","which_",c("first","second","third")) 
    ), 

    mainPanel(

     textOutput("lastButtonCliked") 
    ) 
) 
)) 


server <- shinyServer(function(input, output,session) { 
    observeEvent(input$save,{ 
    updateSelectInput(session,"which_",selected = input$last_btn) 
    }) 
    output$lastButtonCliked=renderText({input$last_btn}) 

}) 
# Run the application 
shinyApp(ui = ui, server = server) 
+0

ありがとうございました。また、selectInputボタンで現在選択されている値を保存する方法についても説明できますか?私がselectInputとactionButton 'Save'を持っているとします。 'Save'をクリックするたびに、selectInputに現在選択されている値をupdateSelectInputとして保存したいのですが、それを追加できますか?あなたが望むなら、私は新しい質問を追加することができます。 – user3463225

+0

あなたは何をしたいの更新を参照してください? – Batanichek

+0

私は選択肢= c(1:5)、選択肢= 1を持っていて、選択した値を4に変更して「保存」をクリックした場合、selectInputボタンはその選択値を4に更新する最後に選択した値を保存する前に選択してください) – user3463225

2

最後にクリックされたボタンこのコードトラック:多くのボタンを持つlapplyと

library(shiny) 


    ui <- shinyUI(fluidPage(


     titlePanel("Track last clicked Action button"), 


     sidebarLayout(
      sidebarPanel(
      actionButton("first", "First"), 
      actionButton("second", "Second"), 
      actionButton("third", "Third") 
     ), 

      # Show a plot of the generated distribution 
      mainPanel(
      textOutput("lastButtonCliked") 
     ) 
     ) 
    )) 


    server <- shinyServer(function(input, output) { 

      rv <- reactiveValues(lastBtn = character()) 
      observeEvent(input$first, { 
        if (input$first > 0) { 
          rv$lastBtn = "first" 
        } 
      }) 
      observeEvent(input$second, { 
        if (input$second > 0) { 
          rv$lastBtn = "second" 
        } 
      }) 
      observeEvent(input$third, { 
        if (input$third > 0) { 
          rv$lastBtn = "third" 
        } 
      }) 
      output$lastButtonCliked <- renderText({ 
        paste("Last button clicked: ", rv$lastBtn) 
      }) 
    }) 
    # Run the application 
    shinyApp(ui = ui, server = server) 

バージョン。クレジットは@Victorpとthis answerに行きます。

これはコードです:

library("shiny") 
    ui <- fluidPage(
      fluidRow(
        column(
          width = 6, 
          lapply(
            X = 1:5, 
            FUN = function(i) { 
              actionButton(inputId = paste0("button", i), label = paste("Button ", i)) 
            } 
          ) 
        ), 
        column(
          width = 6, 
          textOutput("lastButtonCliked") 
        ) 
      ) 
    ) 
    server <- function(input, output){ 

      rv <- reactiveValues(lastBtn = character()) 

      lapply(
        X = 1:6, 
        FUN = function(i){ 
          observeEvent(input[[paste0("button", i)]], { 
            if (input[[paste0("button", i)]] > 0) { 
              rv$lastBtn = paste0("button", i)  
            } 
          }) 
        } 
      ) 

      output$lastButtonCliked <- renderText({ 
        paste("Last button clicked: ", rv$lastBtn) 
      }) 
    } 
    shinyApp(ui = ui, server = server) 
+1

もし私が100のactionButtonsを持っていたら、どのように多くのobserveEventsを書くのですか?あなたのボタンは 'button' + Xで始まり、Xは1から100までです。 – user3463225

関連する問題