R:Shiny.OnInputChange实时点击

时间:2018-12-13 16:44:45

标签: javascript jquery r shiny

说我在浏览器DOM中有一个对象,其类为“ row”,id为“ row22”。

我想使用Shiny.onInputChange()来检测对该对象的单击,并将ID发送到Shiny input $变量。我已经厌倦了Google,正在寻找如何做到这一点的示例,但是还没有提出任何建议。知道如何执行此操作的人可以提供一些示例代码吗? 它应该在jquery中像$(document).on一样工作

例如:

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

function my_row(n) {
  Shiny.onInputChange("js.row", n);
};

在Shiny代码中添加了一个观察者,用于寻找       input$js.row

 observeEvent(input$js.row, {
    print(paste0("Value of js.row is ", input$js.row))
 })

仍然Shiny.OnInputChange不会触发observeEvent(input$js.row!我们有替代方法吗?

1 个答案:

答案 0 :(得分:0)

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

在不知道全部内容的情况下,我是否可以认为您在使用以下方法来触发操作时必须添加一些代码:

function my_row(n) {
  Shiny.onInputChange("js.row", n);
};

要触发函数,当id为row22的元素可以使用:

document.getElementById('row22').onclick 

但是您必须等到加载光泽为止。可以通过以下方式完成:

$(document).on('shiny:sessioninitialized', function(event) {

完整示例如下:

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)