【发布时间】:2017-12-17 08:32:34
【问题描述】:
我想添加单击表格单元格后发生的某些事情的功能(例如打开模式)。因为(假设我的 dt 的 ID 为“dt”)input$dt_cell_clicked 在我单击新单元格之前保持不变,因此我无法在重新单击该单元格时执行相同的事件。
我尝试使用javascript手动重置input$dt_cell_clicked。这可行,但是 DT 中似乎有一个内部更新标记,它注意到我之前单击了单元格并且没有将 input$dt_cell_clicked 的值设置为单击的值。有解决方法还是这是一个错误?
谢谢!
小例子:
library(shiny)
library(shinyjs)
ui <- fluidPage(
h2("Last clicked:"),
verbatimTextOutput("last_clicked"),
actionButton("reset", "Reset clicked value"),
h2("Datatable:"),
DT::dataTableOutput("dt"),
useShinyjs(),
extendShinyjs(text = paste0("shinyjs.resetDTClick = function() { Shiny.onInputChange('dt_cell_clicked', null); }"))
)
server <- function(input, output) {
# the last clicke value
output$last_clicked <- renderPrint({
str(input$dt_cell_clicked)
})
output$dt <- DT::renderDataTable({
DT::datatable(head(mtcars, 2))
})
observeEvent(input$dt_cell_clicked, {
validate(need(length(input$dt_cell_clicked) > 0, ''))
alert("You clicked something!")
})
observeEvent(input$reset, {
js$resetDTClick()
})
}
shinyApp(ui, server)
【问题讨论】:
-
尝试使用
DT::selectRows取消选择行。 -
这不是关于行选择,而是关于重置最后点击的值:)
标签: datatables shiny dt shinyjs