Elementos deshabilitados cuando Shiny está ocupado
Estoy usando un pedazo dejavascript
de esta pregunta:ASI QU
Funciona para botones, pero también me gustaría deshabilitar cosas comosliderInput
, selectInput
ytextInput
también
Intenté reemplazar el 'botón' con 'entrada' que deshabilita eltextinput
campos. Me pregunto si hay una manera de deshabilitar todos los elementos de una vez.
l problema más grande es el siguiente: cuando abres ladropdownbutton
, el botón de cierre normalmente debería eliminar lamodal dialog
en caso de que la etiqueta de JavaScript se elimine de la aplicación de demostración a continuación. Sin embargo, cuando el script está en la aplicación, el botón de cerrar ya no funciona por alguna razón. Todavía imprime el comando de texto, lo que significa que se observa, pero el modal no se cierra. El otro botón en el diálogo todavía funciona normalmente.
App:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
h3('Disable buttons while running'),
actionButton('btn_run','Run long process'),
hr(),
h3('Inputs'),
actionButton('btn1','Button 1'),
hr(),
textInput('text1', 'Text1',"my text:"),
hr(),
selectInput('select1', 'Selectinput', choices = c('A', 'B', 'C'), selected = 'A'),
hr(),
h5('Dropdown'),
dropdownButton(inputId = "MyDropDown",
h3("This is a dropdown"),
actionButton('btn_run2','Run other long process'),
fluidRow(actionButton( "CloseDropDown", "Close"), style = "float: right; margin-right:10px"),
icon = icon("tasks"),
tooltip = tooltipOptions(title = "Click to open"), width = "500px"),
hr(),
sliderInput('slid3','Slider 1',min=0,max=1,value=0.5),
tags$script(HTML("$(document).on('shiny:busy', function() {
var inputs = document.getElementsByTagName('button');
console.log(inputs);
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
});
$(document).on('shiny:idle', function() {
var inputs = document.getElementsByTagName('button');
console.log(inputs);
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = false;
}
})" ))
)
server <- function(input, output, session){
observeEvent(input$btn_run,{
Sys.sleep(5)
})
observeEvent(input$btn_run2,{
Sys.sleep(5)
})
observeEvent(input$CloseDropDown, {print('closing?')
toggleDropdownButton(inputId = 'MyDropDown') })
}
shinyApp(ui = ui, server = server)