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

Shiny中Shinyjs函数未定义,点击按钮无法隐藏图表求助

解决Shiny中shinyjs函数不生效的问题

我帮你排查了下代码里的问题,核心原因是没有在UI中初始化shinyjs——shinyjs依赖的JavaScript脚本需要通过useShinyjs()函数注入到页面中,否则浏览器无法识别hide()、disable()这类函数,就会出现你遇到的“函数未定义”或者功能不生效的情况。

具体修改步骤

只需要在fluidPage()内部的最开头添加useShinyjs()即可,修改后的完整代码如下:

library("shiny")
library("quantmod")
library("data.table")
library("highcharter")
library("shinyjs")

ui <- fluidPage(
  # 关键:添加这一行初始化shinyjs
  useShinyjs(),
  highchartOutput("plot"),
  actionButton("btn", "Click me")
)

server <- function(input, output, session){
  ##Retrieve stock data
  stock_data <- getSymbols("IBM", auto.assign = FALSE)
  output$plot <- renderHighchart({
    plot_max <- 200
    plot_min <- 100
    highchart(type = "stock") %>%
      hc_yAxis_multiples(
        create_yaxis(2, height = c(200, 50), min = plot_min, max = plot_max, turnopposite = TRUE)
      ) %>%
      # series :D
      hc_add_series_flags(stock_data, dates = as.Date("2018-10-12", format = "%Y-%m-%d"), title = "Testing flag", text = "some words") %>%
      hc_add_series(stock_data, yAxis = 0) %>%
      hc_add_series(stock_data$IBM.Volume, yAxis = 1, type = "column", color = hex_to_rgba("green", 0.7))
  })
  
  observeEvent(input$btn, {
    shinyjs::hide(id = "plot")
  })
}

shinyApp(ui, server)

验证其他shinyjs函数

如果你想测试disable()这类函数,现在也能正常工作了,比如在按钮点击后禁用自身:

observeEvent(input$btn, {
  shinyjs::hide(id = "plot")
  shinyjs::disable(id = "btn") # 现在这个函数会生效
})

简单来说,useShinyjs()是使用shinyjs包所有交互功能的前提,必须在UI中声明,否则shinyjs的所有JS相关操作都无法被页面执行。

内容的提问来源于stack exchange,提问作者Mr.Benson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:10:00