单击某行时如何制作弹出窗口

Posted

技术标签:

【中文标题】单击某行时如何制作弹出窗口【英文标题】:how to make a pop-up window when click on some row 【发布时间】:2021-11-11 13:16:11 【问题描述】:

我的代码中有这些行:

output$ex1 <- DT::renderDataTable(
  DT::datatable(df[df$country == "usa" ,]))
                  

output$ex2 <- DT::renderDataTable(
  DT::datatable(df[df$country == "france" ,]))

现在我想在单击某行时制作一个弹出窗口。 我发现这段代码看起来很有用:

observeEvent(input$mydatatable_rows_selected, showModal(modalDialog(title = "You have selected a row!"))   )

但我不确定我需要在代码中的哪个位置写下这一行

【问题讨论】:

这能回答你的问题吗? Shiny datatable: popup data about selected row in a new window 不,我看到了这个答案,但它没有解决我的问题。当我输出 $ex1 和输出 $ex2 时我如何使用它? 在observeEvent中用ex1(或ex2)替换mydatatable所以observeEvent(input$mydatatable_row_selected ... -> observeEvent(input$ex1_row_selected ... mycars[input$mydatatable_rows_selected,] -> df[df$country == "usa" ,][input$ex1_rows_selected,] 好的,但是我把这条线放在哪里? output$ex1 【参考方案1】:

在 cmets 中建议您的解决方案适用于行选择,然后如果您禁用选择,它将无法工作。

这里是行点击的解决方案:

library(shiny)
library(DT)

ui <- fluidPage(
  br(),
  splitLayout(
    DTOutput("dtable1"),
    DTOutput("dtable2")
  )
)

js <- function(id) 
  c(
    "table.on('click', 'tr', function()",
    sprintf("Shiny.setInputValue('%s', true, priority: 'event');", id),
    ");"
  )


server <- function(input, output, session)
 
  output[["dtable1"]] <- renderDT(
    datatable(iris, callback = JS(js("t1")))
  )

  output[["dtable2"]] <- renderDT(
    datatable(iris, callback = JS(js("t2")))
  )
  
  observeEvent(input[["t1"]], 
    showModal(
      modalDialog(
        "You clicked on a row of table 1"
      )
    )
  )

  observeEvent(input[["t2"]], 
    showModal(
      modalDialog(
        "You clicked on a row of table 2"
      )
    )
  )
  


shinyApp(ui, server)

编辑

如果你想要点击行的索引:

library(shiny)
library(DT)

ui <- fluidPage(
  br(),
  splitLayout(
    DTOutput("dtable1"),
    DTOutput("dtable2")
  )
)

js <- function(id) 
  c("console.log(table);",
    "table.on('click', 'tr', function()",
    "  var index = this.rowIndex;",
    sprintf("Shiny.setInputValue('%s', index, priority: 'event');", id),
    ");"
  )


server <- function(input, output, session)
 
  output[["dtable1"]] <- renderDT(
    datatable(iris, callback = JS(js("t1")))
  )

  output[["dtable2"]] <- renderDT(
    datatable(iris, callback = JS(js("t2")))
  )
  
  observeEvent(input[["t1"]], 
    showModal(
      modalDialog(
        sprintf("You clicked on row number %d of table 1", input[["t1"]])
      )
    )
  )

  observeEvent(input[["t2"]], 
    showModal(
      modalDialog(
        sprintf("You clicked on row number %d of table 2", input[["t2"]])
      )
    )
  )
  


shinyApp(ui, server)

【讨论】:

但我没有两张桌子,我只有一张桌子,里面有几条吧

以上是关于单击某行时如何制作弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android studio 的弹出窗口内添加滚动的 listView?

我想在主窗口上制作一个弹出窗口

从 jqModal 打开另一个弹出窗口

php如何制作弹出窗口

单击python kivy中的按钮后如何打开弹出窗口?

如何通过单击外部来关闭 Twitter Bootstrap 弹出窗口?