假设我在浏览器DOM中有一个带有class=“row”
和id=“row22”
的对象。
我想使用Shiny.onInputChange()
来检测对该对象的点击,并将id发送给一个出色的input$
变量。我已经精疲力竭地寻找一个如何做到这一点的谷歌的例子,但没有提出任何东西。知道怎么做的人能提供一些示例代码吗?它的工作原理应该类似于jquery中的$(document).on
例如:
在Javascript中,添加了如下所示的函数:
function my_row(n) {
Shiny.onInputChange("js.row", n);
};
在闪亮的代码中,添加了一个观察者来寻找input$js.row
上的变化:
observeEvent(input$js.row, {
print(paste0("Value of js.row is ", input$js.row))
})
仍然Shiny.OnInputChange
没有触发observeEvent(input$js.row
!我们有没有其他方法?
发布于 2018-12-14 08:03:29
您的代码片段看起来是一个很好的起点。
在不了解全部内容的情况下,我认为当您使用以下命令触发操作时,必须添加一些代码:
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)
https://stackoverflow.com/questions/53766474
复制相似问题