В блестящем приложении есть следующие элементы:
- одно поле
numericInput
со значениями от 0 до 3 - один
uiOutput
, содержащий три скрытыхtextInput
поля - один
actionButton
Я хотел бы добиться show
скрытых textInput
полей после нажатия кнопки. Количество отображаемых полей зависит от числа, выбранного в numericInput
. Полнофункциональный код ниже успешно справляется с этим; однако есть проблема, решения которой я не могу найти. Например, если я выберу 3
и нажму кнопку, появятся 3 скрытых поля textInput
(ура!), Но если я сразу выберу число меньше 3
и нажму кнопку, нежелательные поля все равно останутся. Как я могу этого добиться? Спасибо
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
numericInput(inputId = "num", label = "How many inputs do you want to show?", value = 1, min = 1, max = 3),
uiOutput(outputId = "out"),
actionButton(inputId = "go", label = "Click me!")
)
server <- function(input, output){
output$out <- renderUI({
numinputs <- lapply(1:3, function(i){
textInput(inputId = paste0("txt", i), label = paste0("Text input ", i))
})
shinyjs::hidden(numinputs)
})
observeEvent(eventExpr = input$go, handlerExpr = {
for(i in seq(input$num)){
shinyjs::show(id = paste0("txt", i))
}
})
}
shinyApp(ui = ui, server = server)