2016-10-21 2 views
2

У меня есть несколько кнопок действий, на которых я хочу показать разные входы ввода, и я хочу знать последнюю кнопку ID кнопки, как я могу это сделать? Когда я используюR блестящий - кнопка с последним нажатием кнопки

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

Это показывает мне все кнопки, которые были нажаты, но я хочу знать, какой из них был последним, с тем чтобы снова нажать на предыдущей кнопке. Как я могу это сделать? Я новичок в блестящей и не уверен, понимаю ли я все реактивную/изолирующую проблему, поэтому буду приветствовать любые намеки.

ответ

3

Вы можете сделать это путем добавления JS

smthing как

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

Пример (добавить класс 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'. Для каждого щелчка «Сохранить» я хочу сохранить текущее выбранное значение в selectInput как updateSelectInput, не могли бы вы добавить это? Если вы хотите, я могу добавить новый вопрос. – user3463225

+0

посмотреть, что вы хотите? – Batanichek

+0

Не совсем, я имел в виду, что если selectInput у меня есть выбор = c (1: 5), selected = 1, и если я изменю выбранное значение приложения на 4 и нажмите «Сохранить», selectInput-кнопка обновит свое выбранное значение до 4 (так последнее выбранное значение перед нажатием кнопки «Сохранить») – user3463225

2

Этот код дорожки, какая кнопка была нажата последняя:

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) 

версии с lapply с большим количеством кнопок. Кредит отправляется на @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 кнопок действий, как написать так много наблюдений? предположим, что ваши кнопки начинаются с «кнопки» + X, где X от 1 до 100 – user3463225

Смежные вопросы