R Shiny-使用Shinyjs :: reset重置一组动态创建的输入

时间:2019-06-04 04:28:39

标签: r shiny shinyjs

以下应用具有两个按钮:AddReset All。单击Add会插入一个UI对象,其中包含:

  1. 两个输入MonthYear
  2. 一个删除按钮Remove,单击该按钮即可删除该对象。

单击Reset All会将所有插入的输入重置为其原始值。

以下是单击Add三次后的应用屏幕截图:

enter image description here

该应用程序如下:

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按钮似乎在大多数情况下都有效,但是在以下情况下会失败:

  1. 点击Add
  2. 对第1个月的输入进行更改并按Reset All-在这里起作用,第1个月的输入将重置为其初始值。
  3. 再次单击Add
  4. 更改第2个月的Year并单击Reset All-在这里不起作用,第2个月的Year输入重置为初始值( 但是,再次单击Reset All确实会重置该值,这很混乱)。

我不确定是什么原因导致了这种现象或如何纠正这种现象,因此任何帮助将不胜感激。

0 个答案:

没有答案