Shiny组件联动问题:取消A/B时自动取消A1复选框
解决Shiny代码的显示逻辑问题
问题分析
当前代码的核心问题是:取消A或B(或两者都取消)时,A1复选框会隐藏,但由于A1仍处于选中状态,导致下方的Buttons单选按钮组依然显示。需要实现的逻辑是:当A和B不同时被选中时,自动取消A1的选中状态,让Buttons随之隐藏。
解决方案
在server函数中添加监听逻辑,当input$choice变化时,检查是否同时包含A和B,若不满足条件则将a1重置为未选中状态。修改后的完整代码如下:
library(shiny) ui <- fluidPage( checkboxGroupInput("choice", "Choice", choices = c("A", "B"), selected = NULL), conditionalPanel( condition='input.choice.indexOf("A") > -1 && input.choice.indexOf("B") > -1', h5(tags$b("Single checkbox")), checkboxInput(inputId = "a1", label = "A1", value = FALSE)), conditionalPanel( condition = "input.a1 == 1", radioButtons(inputId = "A11", label = "Buttons", choices = list("Bla" = 2, "Ble" = 3), selected = 2)) ) server <- function(input, output, session) { # 监听choice变化,当A和B不同时选中时重置a1 observeEvent(input$choice, { if (!all(c("A", "B") %in% input$choice)) { updateCheckboxInput(session, "a1", value = FALSE) } }) } shinyApp(ui = ui, server = server)
代码说明
- 用
observeEvent监听input$choice的变化,每次选择变更时触发判断逻辑 - 通过
all(c("A", "B") %in% input$choice)检查是否同时选中A和B - 若不满足条件,调用
updateCheckboxInput将a1设为未选中,Buttons的条件面板会自动隐藏
内容的提问来源于stack exchange,提问作者AussieAndy
相关产品推荐
相关产品推荐

