首页 > 解决方案 > R Shiny Datatable:防止再次单击已选择的行时取消选择它

问题描述

R (ver 3.4.1) 我正在使用闪亮 (ver 1.0.5) 中的 DT (ver 0.4) 包,并且需要在用户再次单击它时防止取消选择已选择的行。例如,在下图中,如果用户再次单击第 3 行,则不应取消选择。但是,如果用户选择了一个新行,则该新行将被选中,而之前的行将被取消选择。

我想我需要的是让数据表完全忽略已选择行上的点击事件。

如果用户再次单击第 3 行,则它不应被取消选择,但如果他单击新行,则应在取消选择旧行时选择该新行

我尝试使用shinyjs::onclick如下所示,但并不理想,因为它似乎“取消选择并重新选择”选定的行(蓝色突出显示消失并在再次单击时重新出现)而不是阻止取消选择

library(shiny)
library(DT)
library(shinyjs)

shinyApp(
  ui <- shinyUI(
    fluidPage(
      shinyjs::useShinyjs(),
      DTOutput("test")
    )
  ),  
  server <- shinyServer(function(input, output, session) {

    output$test <- renderDT({
      datatable(head(iris), selection = 'single')
    })    
    shinyjs::onclick("test",
               selectRows(dataTableProxy("test"), selected = input$test_rows_selected)
             )    
  })
)

我想知道是否有一种简单的方法可以做到这一点。谢谢!

标签: javascriptrdatatablesshinydt

解决方案


尝试pointer-events: none在 css 中使用:

table.dataTable tbody tr.selected {
  pointer-events: none
}

唯一的限制是它会阻止当前选定行上的整个悬停/单击事件,因此您不能在具有可悬停/可单击 HTML 内容的列上使用它。

我希望它有帮助!


推荐阅读