簡體   English   中英

R: Shiny.OnInputChange 實時點擊

[英]R: Shiny.OnInputChange live click

假設我在瀏覽器 DOM 中有一個class=“row”id=“row22”

我想使用Shiny.onInputChange()來檢測對該對象的點擊並將 id 發送到 Shiny input$變量。 我已經厭倦了谷歌尋找如何做到這一點的例子,但沒有想出任何東西。 知道如何執行此操作的人可以提供一些示例代碼嗎? 它應該像 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 !我們有替代方法嗎?

您的代碼片段看起來是一個很好的起點。

在不知道完整內容的情況下,我認為您在觸發操作時必須添加一些代碼:

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

當你想觸發該函數時,當元素 id = row22 時,你可以使用:

document.getElementById('row22').onclick 

但是你必須等到 Shiny 加載完畢。 這可以通過以下方式完成:

$(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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM