Primero, como se menciona en esa respuesta :
El enfoque $(document).ready no funcionará porque el servidor no generará sus salidas hasta que el DOM esté listo. Use session$onFlushed en su lugar, con el parámetro once establecido en TRUE, luego shiny ejecutará la función solo una vez, no en cada descarga de sesión.
Derecha. Ahora, tengo un botón de acción ( #btn3 actionButton que aparece en la aplicación cuando hago clic en otro ( #btn1 ). Sin embargo, jQuery no funciona cuando este botón aparece después de hacer clic en otro. Quiero aplicar efectos de mouseover y mouseout en #btn3 cuando aparezca.
Mi aplicación:
library(shiny) ui <- fluidPage( shinyjs::useShinyjs(), fluidRow(actionButton(inputId = "btn1", label = 'Press'), uiOutput("btn2")) ) server <- function(input, output, session) { observeEvent(input$btn1, { output$btn2 <- renderUI({ actionButton( inputId = "btn3", label = "", title = "Ver/ esconder análise", icon = icon('eye'), style = "color: #f2f2f2; background-color: #008cba;" ) }) }) session$onFlushed(function() { shinyjs::runjs("$('#btn3').on('mouseover',function(){ $(this).css({'color':'#020202','background-color':'#ffff00'}); }); $('#btn3').on('mouseout',function() { $(this).css({'color':'#f2f2f2','background-color':'#008cba'}); });") }, once=TRUE) } shinyApp(ui, server)¿Cómo resolver esto?
library(shiny) js <- " $(document).ready(function(){ $('#btn3').on('mouseover', function(){ $(this).css({'color': '#020202', 'background-color': '#ffff00'}); }).on('mouseout', function() { $(this).css({'color': '#f2f2f2', 'background-color': '#008cba'}); }); }); " ui <- fluidPage( tags$head(tags$script(HTML(js))), br(), fluidRow( actionButton( inputId = "btn1", label = 'Press', onclick = "$('#btn3').show()" ), actionButton( inputId = "btn3", label = "", title = "Ver/ esconder análise", icon = icon('eye'), style = "display: none; color: #f2f2f2; background-color: #008cba;" ) ) ) server <- function(input, output, session) { } shinyApp(ui, server)