观察事件中的 Jquery

标签 jquery r shiny

我试图在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/

相关文章:

r - 使在一个 react ​​性对象中创建的对象以 Shiny 的方式可供另一个 react 性对象使用

r Shiny : highlight some cells

data.table 中的行号

r - 在rocker/shiny docker中部署 Shiny 的应用程序

forms - jQuery移动表单提交而不触发页面导航

jquery - 如何在 jQuery 中复制表单内容?

根据条件替换列表中的值

r - 在 Rcpp 中测试值同一性

javascript - 如何在 prev() 中使用正则表达式?

jquery - 将变量从 .each 循环传递到函数内的 if 语句