我正在开发一个shiny 的应用程序,在其中我使用bslib包的主题.但是,当我禁用如下所示的输入时,它将变得不可读:

library(shiny)
library(bslib)

ui <- page_fluid(
  shinyjs::useShinyjs(),
  theme = bs_theme(preset = "shiny"),
  selectizeInput("id1", "selection unreadable", choices = 1:3, multiple = T)  
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit =T, {
    shinyjs::disable('id1')
  })
  
}
shinyApp(ui, server)

enter image description here

有没有一种方法,我仍然可以使用bs_theme(preset = "shiny"),但对禁用的输入具有更透明的外观,如默认主题:

ui <- fluidPage(
  shinyjs::useShinyjs(),
  selectInput("id1", "selection readable", choices = 1:3, multiple = T)
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit =T, {
    shinyjs::disable('id1')
  })
}
shinyApp(ui, server)

enter image description here

推荐答案

您可以覆盖处于禁用状态的项目的css样式.或者您可以使用lock方法,定义处于锁定状态的项的css样式(默认情况下,此类项没有特定的css样式):

library(shiny)
library(bslib)

css <- "
.selectize-input.items.not-full.has-options.has-items.locked > .item {
  opacity: 0.7;
  background-color: #D3D3D3;
}"

ui <- page_fluid(
  tags$head(tags$style(HTML(css))),
  shinyjs::useShinyjs(),
  theme = bs_theme(preset = "shiny"),
  selectizeInput("id1", "selection readable", choices = 1:3, multiple = TRUE)  
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit = TRUE, {
    shinyjs::runjs("$('#id1')[0].selectize.lock();")
  })
  
}
shinyApp(ui, server)

R相关问答推荐

过滤矩阵以获得R中的唯一组合

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

以R中的正确顺序将日期时间字符列转换为posixct

用预测NLS处理R中生物学假设之上的误差传播

用值序列对行进行子集化,并标识序列开始的列

使用ggsankey调整Sankey图中单个 node 上的标签

gganimate在使用shadow_mark选项时不保留所有过go 的标记

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

将包含卷的底部25%的组拆分为2行

为什么我的基准测试会随着样本量的增加而出现一些波动?

如何通过判断数据框的一列来压缩另一列?

过滤名称以特定字符串开头的文件

列名具有特殊字符时的循环回归

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

为什么我对圆周率图的蒙特卡罗估计是空的?

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

位置_道奇在geom_point图中不躲避

根据排名的顶点属性调整曲线图布局(&Q)

网络抓取NBA.com

通过不完全重叠的多个柱连接