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

如何让shinyWidgets中的dropdownButton始终显示在顶层?

解决Shiny中Dropdown被rhandsontable遮挡的问题

这个问题是因为rhandsontable渲染的表格元素默认层级(z-index)高于shinyWidgets的dropdown菜单,导致菜单被遮挡。你可以通过自定义CSS提升dropdown菜单的层级来解决:

在UI中添加一段CSS样式,强制设置dropdown菜单的z-index为更高的值:

tags$style(HTML("
  .shiny-dropdown .dropdown-menu {
    z-index: 9999 !important;
  }
"))

修改后的完整代码如下:

library(shiny)
library(shinyWidgets)
library(shinydashboard)
library(rhandsontable)

factorUI <- function(id) {
  ns <- NS(id)
  box(
    width=6,
    title = "Charts",
    closable = TRUE,
    status = "danger",
    solidHeader = TRUE,
    collapsible = TRUE,
    dropdown(
      style = "material-circle", 
      selectInput(ns("options"),"Select an option:",
                  choices = list("All" = "all", "Option1" = "option1","Option2" = "option2"),selected = "all"),
      conditionalPanel("input.options == 'option1'",ns=ns, sliderInput(ns("shr.month"),"No of months:",min=0,max=1,value=c(0,1),step = 1)),
      conditionalPanel("input.options == 'option2'",ns=ns, sliderInput(ns("fh.month"),"No of months:",min=0,max=1,value=c(0,1),step = 1)),
      conditionalPanel("input.manual == 'Y'",fileInput(ns("upload"),"Upload new pattern",accept = ".csv")),
      materialSwitch(inputId = ns("factorind"),label = "Apply factor",status = "primary",right = TRUE),
      conditionalPanel("input.factorind == true",ns=ns,
                       numericInput(ns("start"),"Apply from:",value = NULL,min=0,step=1),
                       numericInput(ns("factor"),"Factor:",value=NULL,min=0)),
      id = ns("sidebar"),
      status = "danger",
      size = "sm",
      icon = shiny::icon("sliders")),
    rHandsontableOutput(ns("table")),
  )
}  

factor <- function(id) {(
  moduleServer(
    id,
    function(input,output,session) {
      output$table <- renderRHandsontable({
        rhandsontable(iris)
      })
    }
  )  
)}    

ui <- fluidPage(
    tags$style(HTML("
      .shiny-dropdown .dropdown-menu {
        z-index: 9999 !important;
      }
    ")),
    titlePanel("Example"),
    sidebarLayout(
        sidebarPanel(),
        mainPanel(factorUI("test"))
    )
)

server <- function(input, output) {
   factor("test")
}

shinyApp(ui = ui, server = server)

这段CSS会针对shinyWidgets生成的dropdown菜单设置极高的z-index值,确保它始终显示在rhandsontable表格的上方。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:21:42