说我在浏览器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
!我们有替代方法吗?
答案 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)