简体   繁体   中英

Change color actionButton when button clicked Shiny R

I have an actionButton defined in the UI as uiOutput("DartSearchAdv"). I would like the button to change color when input$target_min_ab is changed. And when input$DartSearchAdv is pressed, I want the color to go back to default.

I've tried implementing the suggestion here , and the color change will work as desired, but certain outputs generated from the button press are hidden ("mainPanelDST"). I can try getting them to appear if I do show("mainPanelDST"), but then the color change doesn't take place, or the button will disappear until input$target_min_ab is interacted with again.

Below is the relevant code from the server.

global <- reactiveValues(clicked = FALSE)

# Desired style for when button is clicked
defaultColor = 'padding:10px; font-size:120%;
         color: white; background-color: #3E668E;
         border-color: #2C3E50'

# Desired style for when a setting is changed
updateColor = 'padding:10px; font-size:120%;
       color: white; background-color: #428BCA;
       border-color: #95A5A6'

# render the button
output$DartSearchAdv <- renderUI({
      if (global$clicked){
        actionButton("DartSearchAdv", "Update Search",
                     style = defaultColor)
      } else {
        actionButton("DartSearchAdv", "Update Search",
                     style = updateColor)
      }
      
    })

And here are the inputs that should change the color

# input that changes color to updateColor
observeEvent(input$target_min_ab,{
  rv$target_min_ab = input$target_min_ab/100; 
  global$clicked = FALSE; 
})

# input that changes color to default
trigger_button2 <- eventReactive(input$DartSearchAdv, {
# Do stuff in here
global$clicked = TRUE

}

Perhaps this:

library(shiny)

# Desired style for when button is clicked
defaultColor <- "padding:10px; font-size:120%;
         color: white; background-color: #3E668E;
         border-color: #2C3E50"

# Desired style for when a setting is changed
updateColor <- "padding:10px; font-size:120%;
       color: white; background-color: #428BCA;
       border-color: #95A5A6"


ui <- fluidPage(
  uiOutput("DartSearchAdv"), # will be an actionButton
  numericInput("target_min_ab", "Target Min Ab", 1),
  actionButton("DartSearchAdv", "DartSearchAdv")
)


server <- function(input, output, session) {
  global <- reactiveValues(clicked = FALSE)
  rv <- reactiveValues(target_min_ab = NULL)


  # render the button
  output$DartSearchAdv <- renderUI({
    if (global$clicked) {
      actionButton("DartSearchAdv", "Update Search",
        style = defaultColor
      )
    } else {
      actionButton("DartSearchAdv", "Update Search",
        style = updateColor
      )
    }
  })


  observeEvent(input$target_min_ab,
    {
      rv$target_min_ab <- input$target_min_ab / 100
      global$clicked <- TRUE
    },
    ignoreInit = TRUE
  )

  observeEvent(input$DartSearchAdv, {
    global$clicked <- FALSE
  })
}



shinyApp(ui, server)

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM