我有shiny下面的應用程式,其中我使用 js 技術來捕獲應用程式中的點擊,而不必使用閃亮的輸入元素。它運行良好,但不適用于節點,因為我希望能夠捕獲節點并獲取節點 ID。
邏輯如下:我單擊"Click me"文本或節點,然后在 Rstudio 控制臺中輸入input$js.node_clicked. 結果應該是“one_1”,我可以接受 ase"one"對應于節點和“_1”點擊序列。但是當我點擊節點時,我只得到“_1”而不是節點 ID“one_1”。邏輯是從這里開始的。
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)
uj5u.com熱心網友回復:
這就像這樣。你必須使用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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390437.html
標籤:javascript r 闪亮的 节点
上一篇:如何用一個回圈填充R中的多個陣列
下一篇:FUN引數中的乘法
