以下应用具有两个按钮:Add
和Reset All
。单击Add
会插入一个UI对象,其中包含:
Month
和Year
。Remove
,单击该按钮即可删除该对象。单击Reset All
会将所有插入的输入重置为其原始值。
以下是单击Add
三次后的应用屏幕截图:
该应用程序如下:
library(shiny)
library(shinyjs)
# UI
ui <- fluidPage(
useShinyjs(),
tags$head(tags$style(HTML('.shiny-split-layout > div { overflow: visible; }'))),
tagList(
span(
actionButton('add', 'Add'),
actionButton('reset', 'Reset All')
),
fluidRow(div(id = 'placeholder'))
)
)
# SERVER
server <- function(input, output, session) {
rv = reactiveValues(ctn = 0)
observeEvent(input$add, {
rv$ctn = rv$ctn + 1
Id = function(id) paste0(id, rv$ctn)
insertUI(
selector = '#placeholder',
ui = div(
id = Id('inputGroup'),
splitLayout(
cellWidths = '10%',
h4(Id('Month ')),
selectInput(Id('month'), 'Month:', month.name),
selectInput(Id('year'), 'Year:', 1510:1550),
actionButton(Id('remove'), 'Remove'))
)
)
remove_id = Id('remove')
remove_group = Id('inputGroup')
observeEvent(input[[remove_id]], {
removeUI(selector = paste0('#', remove_group))
})
})
observeEvent(input$reset, {
reset('placeholder')
})
}
# Run app
shinyApp(ui, server)
Reset All
按钮似乎在大多数情况下都有效,但是在以下情况下会失败:
Add
。Reset All
-在这里起作用,第1个月的输入将重置为其初始值。Add
。Year
并单击Reset All
-在这里不起作用,第2个月的Year
输入不重置为初始值( 但是,再次单击Reset All
确实会重置该值,这很混乱)。我不确定是什么原因导致了这种现象或如何纠正这种现象,因此任何帮助将不胜感激。