J’ai 10 boutons d’action ‘Modifier‘. Trois boutons d’action apparaissent sur chaque bouton d’action «Modifier». Après avoir cliqué sur le bouton “Enregistrer” sous les entrées sélectionnées, je veux me souvenir des valeurs sélectionnées. Si je vais à la rangée 2 -> cliquez sur ‘Éditer’ -> sélectionnez les valeurs -> cliquez sur ‘Enregistrer’ et revenez à la rangée 1, il ne se souvient pas des valeurs précédemment sélectionnées de la rangée 1.
Donc, je veux avoir deux actions sur le bouton ‘Enregistrer’ à savoir:
faire disparaître tous les selectInput après avoir cliqué sur le bouton Enregistrer
bibliothèque (shiny)
ui <- shinyUI(fluidPage( titlePanel("Update Select Inputs"), mainPanel( tags$head(tags$script(HTML("$(document).on('click', '.needed', function () { Shiny.onInputChange('last_btn',this.id); });"))), column(width = 6, uiOutput('ValuesAndButtons')), column(width = 6,uiOutput('Details')) ) ) ) server <- shinyServer(function(input, output) { output$ValuesAndButtons <- renderUI({ lapply( c(1:10), function(i){ fluidRow( column( width = 4, tags$span(i) ), column( width = 3, tags$button( type = "button", id = paste0('ActionButton', i), class="btn action-button needed", "Edit" ) ) ) } ) }) output$Details <- renderUI ({ req(input$last_btn) fluidRow( lapply( c(1:3), function(i){ fluidRow( fluidRow( column( width = 5, tags$span(i) ), column( width = 5, selectInput( paste0("Details", i), label = NULL, choices = c("","a","b","c"), selected = "" ) ) ) ) }), fluidRow( tags$button( type = "button", id = "Save", class = "btn action-button", href = "#", "Save" ) ) ) }) }) # Run the application shinyApp(ui = ui, server = server)
vous pouvez le faire en stockant des valeurs dans les valeurs reactivevValues
stockées uniquement pour une session
library(shinyjs) # needed for hide and show ui <- shinyUI(fluidPage( titlePanel("Update Select Inputs"), mainPanel( useShinyjs(), tags$head(tags$script(HTML("$(document).on('click', '.needed', function () { Shiny.onInputChange('last_btn',this.id); });"))), column(width = 6, uiOutput('ValuesAndButtons')), column(width = 6,hidden(wellPanel(id="det", lapply(1:3,function(i){ fluidRow( selectInput( paste0("Details", i), label = i, choices = c("","a","b","c"), selected = "" ) ) }), fluidRow( actionButton("Save","Save") ) )) )) ) ) server <- shinyServer(function(input, output,session) { saved_values=reactiveValues(data=NULL) output$ValuesAndButtons <- renderUI({ lapply(1:10,function(i){ fluidRow( column( width = 4, tags$span(i) ), column( width = 3, actionButton(paste0('ActionButton', i),"Edit",class="needed" ) ) ) } ) }) observe({ if(!is.null(input$last_btn)){ observeEvent(input[[input$last_btn]],{ shinyjs::show("det") } ) } }) observeEvent(input$last_btn,{ ll<-saved_values[[input$last_btn]] shinyjs::show("det") if(!is.null(ll) ){ for(i in 1:length(ll)){ updateSelectInput(session = session,inputId = names(ll)[[i]],selected = ll[[i]]) } }else{ shinyjs::reset("det") } }) observeEvent(input$Save,{ saved_values[[input$last_btn]]=lapply(names(input)[which(substring(names(input),1,7)=="Details")],function(i){ input[[ i]] }) names(saved_values[[input$last_btn]])=names(input)[which(substring(names(input),1,7)=="Details")] shinyjs::hide("det") }) }) # Run the application shinyApp(ui = ui, server = server)