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
相关产品推荐
相关产品推荐

