在Shiny中去除模态后,模态中创建的输入值仍然存在

时间:2018-03-01 18:42:57

标签: r shiny

我使用Shiny模式为我的用户提供简短的问卷。默认情况下隐藏此调查问卷的某些部分,并且仅在用户从可见输入中选择某个特定值时显示。

第一次使用模态时一切正常,但是如果要重新提交模式,则不会显示调查问卷的隐藏部分。这是因为在移除模态后Shiny会保留模态内所有输入的值。如果你重新打开它,那么这些值已经被设置在引擎盖上,即使从用户角度来看它看起来很正常,也不会触发观察者。我试图尝试使用reactiveValues来克服这个问题,但到目前为止还没有运气。

显示下面发布的问题的最小示例。重现的步骤:

  • 打开模态
  • 检查"是"
  • 取消或提交
  • 重新打开
  • 选择"是"

现在问卷的第二部分没有显示。

library(shiny)
library(shinyJS)

ui <- fluidPage(
    useShinyjs(),
    actionButton("open", "Open questionarre")
)

server <- function(input, output) {

    observeEvent(input$open, {
        showModal(modalDialog(
            title = "Open the modal",
            radioButtons(
                "radio",
                "Click 'Yes' to show additinal inputs.",
                choices = c("Yes", "No"),
                selected = character(0)
            ),

            shinyjs::hidden(
                div(id = "hiddenContent",
                    checkboxGroupInput(
                        "checkboxes", "What’s up?",
                        choices = list(
                           "Good",
                           "Bad"
                        )
                    )
                )
            ),
            footer = tagList(
                actionButton("cancel", "Cancel", class = "btn-light-grey"),
                actionButton("submit", "Submit")
            )
        ))
    })

    # Hiding and showing mechanism
    observeEvent(input$radio, {
        print(input$radio)
        if (input$radio == "Yes") {
            shinyjs::show("hiddenContent")
        } else {
            shinyjs::hide("hiddenContent")
            reset("checkboxes")
        }
    })

    observeEvent(input$submit, {
        print("Saving")
        removeModal()
    })

    observeEvent(input$cancel, {
        print("Canceling")
        removeModal()
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

0 个答案:

没有答案