You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R shiny.semantic单选项multiple_checkbox返回NULL原因与解决方案

问题原因

该问题是shiny.semantic v0.4.3版本的内置组件缺陷:multiple_checkbox的前端JavaScript绑定逻辑中,表单值序列化规则未兼容仅1个选项的场景,当复选框组只有单个选项时,前端无法正确将选中状态回传给Shiny服务端,导致对应input值始终返回NULL。选项数量≥2时序列化逻辑运行正常,因此功能不受影响。

修复方案

无需修改依赖包源码,只需在UI中注入一段自定义JS代码,重写该组件的取值逻辑即可解决问题,修复后单选项、多选项场景均可正常运行。

修复后完整可运行代码
library(shiny)
library(shiny.semantic)

ui <- function() {
  shinyUI(
    semanticPage(
      title = "Checkbox example",
      # 注入JS修复multiple_checkbox单选项取值问题
      tags$script(HTML("
        $(document).on('shiny:connected', function() {
          const checkboxBinding = Shiny.inputBindings.bindingNames['shiny.semantic.multiple_checkbox'].binding;
          checkboxBinding.getValue = function(el) {
            const checked = $(el).find('input[type=\"checkbox\"]:checked');
            return checked.toArray().map(item => item.value);
          }
        });
      ")),
      h1("多选项复选框"),
      multiple_checkbox("checkboxes_01", "选择字母", LETTERS[1:6], selected = "A"),
      p("已选字母:"),
      textOutput("selected_letters"),
      tags$br(),
      h1("单选项复选框"),
      multiple_checkbox("checkboxes_02", "选择字母", LETTERS[1], selected = "A"),
      p("已选字母:"),
      textOutput("selected_letter")
    )
  )
}

server <- shinyServer(function(input, output) {
  output$selected_letters <- renderText(paste(input$checkboxes_01, collapse = ", "))
  output$selected_letter <- renderText(paste(input$checkboxes_02, collapse = ", "))
})

shinyApp(ui = ui(), server = server)

运行上述代码后,勾选单选项复选框即可正确返回取值A。


内容的提问来源于stack exchange,提问作者Damien Georges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:09:02