簡體   English   中英

R Shiny Datatable:再次單擊時防止取消選擇已選擇的行

[英]R Shiny Datatable: prevent deselection of an already selected row when you click on it again

R(版本 3.4.1)我正在使用閃亮的 DT(版本 0.4)包(版本 1.0.5),並且需要在用戶再次單擊時防止取消選擇已選擇的行。 例如在下圖中,如果用戶再次單擊第 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)
             )    
  })
)

我想知道是否有一種簡單的方法可以做到這一點。 謝謝!

嘗試在 css 中使用pointer-events: none

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

唯一的限制是它會阻止當前選定行上的整個懸停/單擊事件,因此您不能在具有可懸停/可單擊 HTML 內容的列上使用它。

我希望它有幫助!

這只是部分解決方案(請參閱下面的編輯以獲得完整的解決方案) 僅當您在該行上單擊兩次時才有效。 第三次點擊時,該行被取消選擇,我不知道為什么。 也許在一個專家datatables可以幫助。

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();
  }
});"))
    })    
  })
)

編輯

我找到了一個解決方案(我不完全理解)。

  server <- shinyServer(function(input, output, session) {

    output$test <- renderDT({
      datatable(head(iris), selection = list(mode="single", target="row", info=FALSE), 
                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.result === undefined) {
        e.preventDefault();
        $(cell.node()).parent().addClass('selected')
        return false;
      }
    });")
      )
    })    
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM