runjs 在 flexdashboard 中更改 observeEvent 的位置?

Posted

技术标签:

【中文标题】runjs 在 flexdashboard 中更改 observeEvent 的位置?【英文标题】:runjs to change location in observeEvent in flexdashboard? 【发布时间】:2018-10-21 09:40:53 【问题描述】:

我有一个 flexdashboard,并且有一个操作按钮可以执行此操作:

actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success",
         onClick="location.href='#section-your-results';")

然后是执行此操作的观察者:

observeEvent(input$submit,
  some calculation
)

问题是onClick部分是在observeEvent触发之前执行的。所以计算不适用于我要跳到的部分。

我想做的是这样的:

 actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success")

然后有一个观察者这样做:

observeEvent(input$submit,
  some calculation
  useShinyjs()
  runjs("location.href='#section-your-results';")
))

但由于某种原因,runjs 命令没有被执行(我也尝试用alert 替换location.href 来确认。知道出了什么问题吗?我已经看到this answer 并尝试过这种方法也没有运气。

这是(对我而言)一个可重现的示例 - 我希望单击提交时会弹出一个警告框,但它不适合我

---
title: "reprex shinyjs rmd"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
runtime: shiny
---

```r setup, include=FALSE
library(flexdashboard)
library(shinyjs)
useShinyjs(rmd = TRUE)
```

Column data-width=650
-----------------------------------------------------------------------

### Chart A

```r
onclick("submit",runjs('alert("Hello! I am an alert box!!");'))

```

### Chart B

```r
actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success")
```

【问题讨论】:

如果您可以发布一个完全可重现的示例,这将有所帮助,这样我们就不必复制和粘贴几个代码块并根据自己的判断填写空白,我们可以立即看到什么问题是并且有一些东西可以解决。 我添加了一个例子 - 希望我只是在做一些愚蠢的事情:) 【参考方案1】:

所以要让它发挥作用,我必须做两件事:

    useShinyjs() 的位置切换为非设置块。 将onClick 更改为onEvent 并观察输入被点击的事件。

我认为这是因为闪亮的输入元素禁用了按钮的默认单击事件,因此shinyjs 正在监视永远不会发生的事情。

这是一个有效的可重现示例。

---
title: "reprex shinyjs rmd"
output: 
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: scroll
runtime: shiny
---

```r setup, include=FALSE
library(flexdashboard)
library(shinyjs)
```

Column data-width=650
-----------------------------------------------------------------------


```r
useShinyjs(rmd = TRUE)
actionButton(inputId="submit",
             label = "Submit answers",
             class="btn btn-success")
```


```r
observeEvent(input$submit, 
  runjs('alert("Hello! I am an alert box!!");')
)
```

【讨论】:

以上是关于runjs 在 flexdashboard 中更改 observeEvent 的位置?的主要内容,如果未能解决你的问题,请参考以下文章

Flexdashboard:动态更改导航栏标题

在 flexdashboard 中单击时更改第二个标签集

如何更改 flexdashboard selectInput 中的 y

如何在 flexdashboard 中结合行列布局?

在 R 中缩放 flexdashboard 仪表

使用 flexdashboard 模板重现闪亮