Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript R Datatable:再次单击已选定行时,防止取消选择该行_Javascript_R_Datatables_Shiny_Dt - Fatal编程技术网

Javascript R Datatable:再次单击已选定行时,防止取消选择该行

Javascript R Datatable:再次单击已选定行时,防止取消选择该行,javascript,r,datatables,shiny,dt,Javascript,R,Datatables,Shiny,Dt,R(第3.4.1版) 我正在使用shiny(1.0.5版)中的DT(0.4版)软件包,需要防止在用户再次单击已选行时取消选择该行。例如,在下图中,如果用户再次单击第3行,则不应取消选择。但是,如果用户选择新行,则该新行将被选中,而先前的行将被取消选中 我想我需要的是datatable完全忽略 单击已选定行上的事件 我尝试使用如下所示的shinyjs::onclick,但并不理想,因为它似乎“取消选择并重新选择”所选行(再次单击时蓝色突出显示消失并重新出现),而不是阻止取消选择 library(

R(第3.4.1版) 我正在使用shiny(1.0.5版)中的DT(0.4版)软件包,需要防止在用户再次单击已选行时取消选择该行。例如,在下图中,如果用户再次单击第3行,则不应取消选择。但是,如果用户选择新行,则该新行将被选中,而先前的行将被取消选中

我想我需要的是datatable完全忽略 单击已选定行上的事件

我尝试使用如下所示的
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)
             )    
  })
)
库(闪亮)
图书馆(DT)
图书馆(shinyjs)
shinyApp(

ui这只是一个部分解决方案(请参阅下面的编辑以获得完全有效的解决方案)。它仅在您单击行两次时有效。在第三次单击时,该行被取消选择,我不知道为什么。也许
数据表
方面的专家可以提供帮助

library(shiny)
library(DT)

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

    output$test <- renderDT({
      datatable(head(iris), selection = list(mode="single", target="row"), 
                extensions = c("Select"), options = list(select=TRUE),
                callback = JS("
table.on('user-select', 
function (e, dt, type, cell, originalEvent) {
  if ($(cell.node()).parent().hasClass('selected')) {
    e.preventDefault();
  }
});"))
    })    
  })
)
库(闪亮)
图书馆(DT)
shinyApp(

ui尝试在css中使用
指针事件:无

table.dataTable tbody tr.selected {
  pointer-events: none
}
唯一的限制是它阻止了当前选定行上的整个悬停/单击事件,因此您不能在包含可悬停/可单击HTML内容的列上使用它


我希望它能有所帮助!

Shree,我已经编辑了我的第一个答案,以提供一个有效的解决方案。告诉我它是否适合你。这个解决方案似乎和我的一样(使用
shinjs::onclick()
)例如,先取消选择,然后再重新选择单击的行。我是否遗漏了什么?我想我需要的是datatable完全忽略已选择行上的单击事件。希望这有意义。谢谢!@Shree我不确定第一次单击时是否取消选择了该行。但似乎下一次单击时会发生这种情况。但我不确定是否有错误“不是所有的。@Shree,你对这种方式不满意吗?为什么?也许你应该明确你想要做什么。这太好了!谢谢!
table.dataTable tbody tr.selected {
  pointer-events: none
}