r - 如何在 R Shiny DT 数据表中单击触发编辑

标签 r shiny dt

我有一个带有可编辑 DT 表的 Shiny 应用程序。一切都在桌面上完美运行:我双击一个单元格,编辑值,该值在后台处理,整个表格得到适当更新。

但是,在 Android 版 Chrome 上,双击似乎不是一个选项,因此我无法编辑表格中的单元格。

经过大量寻找解决方案后,我尝试添加回调以在单击时触发双击,但没有任何效果。我在下面给出了一个最小的例子。

library(shiny)
library(DT)
ui <- fluidPage( mainPanel( DTOutput("table") ) )
server <- function(input, output, session) {
  NumDays <- 14
  DayNum <- seq_len(NumDays)
  DF <- data.frame(Day=DayNum, Week=((DayNum-1) %/% 7 + 1), Steps=rep(0, NumDays), row.names=NULL)
  proxy <- dataTableProxy('table')
  
  js <- "table.on('click', 'tr', function() { 
  table.cell(this).trigger('dblclick.dt');
  });"

  output$table <- renderDT(datatable(DF, rownames = FALSE, selection = list(mode = 'none'), editable = list(target='cell'), options = list(scrollY = 600, searching = FALSE, paging=FALSE, ordering=FALSE, info=FALSE), callback = JS(js)))
  
  proxy <- dataTableProxy('table')
  observeEvent(input$table_cell_edit, {
    info <- input$table_cell_edit
    i <- info$row;    j <- info$col+1;    v <- info$value
    currentvalue <- abs(as.numeric(v))
    DF[i, j] <<- currentvalue + 10
    replaceData(proxy, DF, rownames = FALSE)
  })
}

shinyApp(ui = ui, server = server)

最佳答案

我只是用一点 jquery 调整了你的示例并让它工作 - 另请注意我将“tr”更改为“td”:

library(shiny)
library(DT)
ui <- fluidPage( mainPanel( DTOutput("table") ) )
server <- function(input, output, session) {
  NumDays <- 14
  DayNum <- seq_len(NumDays)
  DF <- data.frame(Day=DayNum, Week=((DayNum-1) %/% 7 + 1), Steps=rep(0, NumDays), row.names=NULL)
  proxy <- dataTableProxy('table')
  
  js <- "table.on('click', 'td', function() { 
    $(this).dblclick();
  });"
  
  output$table <- renderDT(datatable(DF, rownames = FALSE, selection = list(mode = 'none'), editable = list(target='cell'), options = list(scrollY = 600, searching = FALSE, paging=FALSE, ordering=FALSE, info=FALSE), callback = JS(js)))
  
  proxy <- dataTableProxy('table')
  observeEvent(input$table_cell_edit, {
    info <- input$table_cell_edit
    i <- info$row;    j <- info$col+1;    v <- info$value
    currentvalue <- abs(as.numeric(v))
    DF[i, j] <<- currentvalue + 10
    replaceData(proxy, DF, rownames = FALSE)
  })
}

shinyApp(ui = ui, server = server)

希望这有帮助

关于r - 如何在 R Shiny DT 数据表中单击触发编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66262809/

相关文章:

r - 在 R 中解析字符串并拆分它

r - 如何以 Shiny 的百分比显示 "numericInput"中的值?

css - 调整 Shiny 进度条的大小并将其居中

在浏览器中运行时,R Shiny 数据表图像不会更新

r - 是否可以在 DT 数据表中添加复选框?

r - 在图形上将所有节点连接在一起

r - 在R函数中,将数据框对象指定为名称?循环遍历函数

r - 从 Shiny 的 DT 行选择中添加 react 性排名列表标签

r - 从第二列排序的拣选值

R shiny - Shiny 模块函数中最后单击的按钮 id