我试图在observeevent中使用Jquery,但无法执行它。 当我点击“释放”按钮时,侧边栏应该打开。我这里有一个 Jquery 但不工作。但是当我将相同的 jquery 放入 onclick 方法中时,它就可以工作。但不是在这个方法中
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(collapsed = TRUE),
dashboardBody(
# Boxes need to be put in a row (or column)
actionButton("release", "Release"))
)
server <- function(input, output) {
useShinyjs()
observeEvent(input$release,{
tags$head(tags$script("$('body').toggleClass('sidebar-collapse');"))
})
}
shinyApp(ui, server)
最佳答案
使用 Shiny
为了方便起见,Shiny 附带了一些内置的 jQuery/Bootstrap 函数,toggleClass
就是其中之一。要使用它,请将 useShinyjs()
移动到 dashboardBody
中或之后的某个位置(不要忘记逗号),并将 jQuery 代码替换为对 toggleClass 的调用
:
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(collapsed = TRUE),
dashboardBody(
useShinyjs(), ## <<<
actionButton("release", "Release")
)
)
server <- function(input, output) {
observeEvent(input$release, {
toggleClass(selector = "body", class = "sidebar-collapse") ## <<<
})
}
shinyApp(ui, server)
使用 jQuery
您还可以使用 extendShinyjs
添加自定义函数(包括像您的函数一样的 jQuery 调用)来扩展可用函数,然后使用 js
调用它们。在定义中使用 shinyjs.
前缀为其名称(例如 toggleCollapse
)添加前缀,并在 中使用
参数。js
注册它们以供稍后使用函数
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(collapsed = TRUE),
dashboardBody(
useShinyjs(), ## <<<
actionButton("release", "Release"),
extendShinyjs( ## <<<
text = "shinyjs.toggleCollapse = function() { // <<<
$('body').toggleClass('sidebar-collapse'); // <<<
}", ## <<<
functions = c("toggleCollapse") ## <<<
), ## <<<
)
)
server <- function(input, output) {
observeEvent(input$release, {
js$toggleCollapse() ## <<<
})
}
shinyApp(ui, server)
关于观察事件中的 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73002567/