首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R: Shiny.OnInputChange实时点击

R: Shiny.OnInputChange实时点击
EN

Stack Overflow用户
提问于 2018-12-14 00:44:45
回答 1查看 570关注 0票数 0

假设我在浏览器DOM中有一个带有class=“row”id=“row22”的对象。

我想使用Shiny.onInputChange()来检测对该对象的点击,并将id发送给一个出色的input$变量。我已经精疲力竭地寻找一个如何做到这一点的谷歌的例子,但没有提出任何东西。知道怎么做的人能提供一些示例代码吗?它的工作原理应该类似于jquery中的$(document).on

例如:

在Javascript中,添加了如下所示的函数:

代码语言:javascript
复制
function my_row(n) {
  Shiny.onInputChange("js.row", n);
};

在闪亮的代码中,添加了一个观察者来寻找input$js.row上的变化:

代码语言:javascript
复制
 observeEvent(input$js.row, {
    print(paste0("Value of js.row is ", input$js.row))
 })

仍然Shiny.OnInputChange没有触发observeEvent(input$js.row!我们有没有其他方法?

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 08:03:29

您的代码片段看起来是一个很好的起点。

在不了解全部内容的情况下,我认为当您使用以下命令触发操作时,必须添加一些代码:

代码语言:javascript
复制
function my_row(n) {
  Shiny.onInputChange("js.row", n);
};

当您想触发函数时,当id = row22的元素时,您可以使用:

代码语言:javascript
复制
document.getElementById('row22').onclick 

但你必须等到闪亮装弹。这可以通过以下方式完成:

代码语言:javascript
复制
$(document).on('shiny:sessioninitialized', function(event) {

完整的示例如下:

代码语言:javascript
复制
library(shiny)

ui <- fluidPage(
  tags$script("
    $(document).on('shiny:sessioninitialized', function(event) { // wait for shiny to be loaded
      document.getElementById('row22').onclick = function(elem) {
        Shiny.onInputChange('jsrow', elem.srcElement.textContent);
      };
    });
  "),

  div(class = "row", id = "row21", "counter example"), 
  div(class = "row", id = "row22", "target: click me!") 
)

server <- function(input, output, session) {
  observeEvent(input$jsrow, {
    print(paste0("Value of js.row is ", input$jsrow))
  })
}

shinyApp(ui, server)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53766474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档