如何禁用Shiny中selectInput()的选项选择功能仅作展示?
实现Shiny中selectInput仅展示预设选项(禁用交互)
要实现selectInput仅展示预设选项、禁止用户切换选择的需求,有两种简单直观的方法,比你原来用observeEvent强制回滚的方式更高效:
方法一:使用shinyjs禁用组件
利用shinyjs的disable()函数直接锁定selectInput,用户无法触发任何交互操作。修改后的完整代码如下:
## app.R ## library(shiny) library(shinydashboard) library(shinyjs) ui <- dashboardPage( dashboardHeader(), dashboardSidebar(), dashboardBody( useShinyjs(), uiOutput("sel") ) ) server <- function(input, output, session) { output$sel <- renderUI({ selectInput( "ir", "Select", choices = unique(iris$Species), selected = unique(iris$Species)[1], multiple = FALSE ) }) # 渲染完成后禁用selectInput observe({ shinyjs::disable("ir") }) } shinyApp(ui, server)
方法二:直接添加HTML禁用属性
如果不想依赖shinyjs,可以通过tagAppendAttributes给生成的selectInput添加原生HTML的disabled属性,同样能实现禁用效果:
## app.R ## library(shiny) library(shinydashboard) library(htmltools) ui <- dashboardPage( dashboardHeader(), dashboardSidebar(), dashboardBody( uiOutput("sel") ) ) server <- function(input, output, session) { output$sel <- renderUI({ tagAppendAttributes( selectInput( "ir", "Select", choices = unique(iris$Species), selected = unique(iris$Species)[1], multiple = FALSE ), disabled = "disabled" ) }) } shinyApp(ui, server)
两种方法的效果一致:selectInput会固定显示预设的选中项,下拉框无法展开,用户完全无法修改选择,完美满足仅用于展示的需求。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

