在闪亮的应用程序中捕获点击的 Js 技术不捕获节点 ID
Js technicue to capture clicks in a shiny app does not capture node id
我有下面的 shiny
应用程序,我在其中使用 js 技术来捕获应用程序中的点击,而无需使用闪亮的输入元素。它运行良好但不适用于节点,因为我希望能够捕获节点并获取节点 ID。
逻辑如下:我单击 "Click me"
文本或节点,然后在 Rstudio 控制台中键入 input$js.node_clicked
。结果应该是“one_1”,我可以接受,因为 "one"
对应于节点,点击序列上的“_1”。但是当我点击节点时,我只得到“_1”而不是节点 ID“one_1”。逻辑来自here.
library(shiny)
library(shinyWidgets)
library(DiagrammeR)
library(magrittr)
js <- '
$(document).on("click", ".node", function(e) {
if(typeof BUTTON_CLICK_COUNT == "undefined") {
BUTTON_CLICK_COUNT = 1;
} else {
BUTTON_CLICK_COUNT ++;
}
Shiny.onInputChange("js.node_clicked",
e.target.id + "_" + BUTTON_CLICK_COUNT);
});
'
ui <- fluidPage(
tags$script(HTML(js))
,
div(id="one","click me",class="node")
,
uiOutput("main")
)
server <- function(input, output) {
output$main <- renderUI({
tagList(
div(
grVizOutput("grr", width = "100%", height = "90vh")
))
})
output$grr <- renderGrViz(grViz( "digraph test{
A[tooltip='A word'];
B[tooltip='Another word'];
A -> B;}" )
)
observeEvent(input$js.node_clicked , {
browser()
}) #
}
shinyApp(ui, server)
这是这样工作的。您必须使用 currentTarget
而不是 target
。避免在Shiny.setInputValue
(或Shiny.onInputChange
,两者相同)的输入名称中包含点,因为点具有特殊含义。
library(shiny)
library(shinyWidgets)
library(DiagrammeR)
library(magrittr)
js <- '
$(document).on("click", ".node", function(e) {
if(typeof BUTTON_CLICK_COUNT === "undefined") {
BUTTON_CLICK_COUNT = 1;
} else {
BUTTON_CLICK_COUNT++;
}
Shiny.setInputValue("js_node_clicked",
e.currentTarget.id + "_" + BUTTON_CLICK_COUNT);
});
'
ui <- fluidPage(
tags$script(HTML(js)),
div(id="one", "click me", class="node"),
uiOutput("main")
)
server <- function(input, output) {
output$main <- renderUI({
tagList(
div(
grVizOutput("grr", width = "100%", height = "90vh")
)
)
})
output$grr <- renderGrViz(grViz( "digraph test{
A[tooltip='A word'];
B[tooltip='Another word'];
A -> B;}" )
)
observeEvent(input$js_node_clicked , {
print(input$js_node_clicked)
})
}
shinyApp(ui, server)
我有下面的 shiny
应用程序,我在其中使用 js 技术来捕获应用程序中的点击,而无需使用闪亮的输入元素。它运行良好但不适用于节点,因为我希望能够捕获节点并获取节点 ID。
逻辑如下:我单击 "Click me"
文本或节点,然后在 Rstudio 控制台中键入 input$js.node_clicked
。结果应该是“one_1”,我可以接受,因为 "one"
对应于节点,点击序列上的“_1”。但是当我点击节点时,我只得到“_1”而不是节点 ID“one_1”。逻辑来自here.
library(shiny)
library(shinyWidgets)
library(DiagrammeR)
library(magrittr)
js <- '
$(document).on("click", ".node", function(e) {
if(typeof BUTTON_CLICK_COUNT == "undefined") {
BUTTON_CLICK_COUNT = 1;
} else {
BUTTON_CLICK_COUNT ++;
}
Shiny.onInputChange("js.node_clicked",
e.target.id + "_" + BUTTON_CLICK_COUNT);
});
'
ui <- fluidPage(
tags$script(HTML(js))
,
div(id="one","click me",class="node")
,
uiOutput("main")
)
server <- function(input, output) {
output$main <- renderUI({
tagList(
div(
grVizOutput("grr", width = "100%", height = "90vh")
))
})
output$grr <- renderGrViz(grViz( "digraph test{
A[tooltip='A word'];
B[tooltip='Another word'];
A -> B;}" )
)
observeEvent(input$js.node_clicked , {
browser()
}) #
}
shinyApp(ui, server)
这是这样工作的。您必须使用 currentTarget
而不是 target
。避免在Shiny.setInputValue
(或Shiny.onInputChange
,两者相同)的输入名称中包含点,因为点具有特殊含义。
library(shiny)
library(shinyWidgets)
library(DiagrammeR)
library(magrittr)
js <- '
$(document).on("click", ".node", function(e) {
if(typeof BUTTON_CLICK_COUNT === "undefined") {
BUTTON_CLICK_COUNT = 1;
} else {
BUTTON_CLICK_COUNT++;
}
Shiny.setInputValue("js_node_clicked",
e.currentTarget.id + "_" + BUTTON_CLICK_COUNT);
});
'
ui <- fluidPage(
tags$script(HTML(js)),
div(id="one", "click me", class="node"),
uiOutput("main")
)
server <- function(input, output) {
output$main <- renderUI({
tagList(
div(
grVizOutput("grr", width = "100%", height = "90vh")
)
)
})
output$grr <- renderGrViz(grViz( "digraph test{
A[tooltip='A word'];
B[tooltip='Another word'];
A -> B;}" )
)
observeEvent(input$js_node_clicked , {
print(input$js_node_clicked)
})
}
shinyApp(ui, server)