R Shiny:如何使用tagQuery()根据复选框值修改Bootstrap按钮颜色
问题原因
- 核心问题:
tagQuery是R端用于操作静态HTML标签对象的工具,你在server中修改的是定义初始界面的静态ui对象,这个修改不会同步到已经在用户浏览器中渲染完成的前端页面,自然不会产生可见效果。 - 次要问题:你写的CSS规则没有闭合,缺少了结尾的
},就算类成功添加上样式也不会生效。
修复方案
最简单的实现方式是使用shinyjs包完成前端类名的动态修改,完整可运行代码如下:
library(shiny) library(shinyjs) library(htmltools) ui = fluidPage( useShinyjs(), # 初始化shinyjs,必须添加 tags$style( HTML( ".testclass {background-color: pink !important;}" # 补全CSS闭合,加!important避免Bootstrap默认样式覆盖 ) ), tags$div(style = "margin: 100px;", tags$input(type = "checkbox", "Check", id = "x"), tags$button("Click", class="btn btn-default dropdown-toggle", id = "dropdownMenu1") ) ) server = function(input, output, session){ observeEvent(input$x, { # 直接调用shinyjs的类操作函数,第一个参数为元素id,第二个为要操作的类名 toggleClass("dropdownMenu1", "testclass", condition = isTRUE(input$x)) }) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者werN
相关产品推荐
相关产品推荐

