单击某行时如何制作弹出窗口
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)
【讨论】:
但我没有两张桌子,我只有一张桌子,里面有几条吧以上是关于单击某行时如何制作弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章