【问题标题】:Shiny datatable Tooltip/popover not working with paging闪亮的数据表工具提示/弹出框不适用于分页
【发布时间】:2019-01-08 15:11:55
【问题描述】:

我想在数据表的每一行上添加一个弹出框。 使用 [这里] (tooltip or popover in Shiny datatables for row names?) 提供的解决方案(我不懂 JavaScript,所以我盲目地复制粘贴代码)我设法在表格的第一页上添加了弹出框。

问题是表格很大,所以我不得不将它分成更多的页面。当我选择表格的另一页时,弹出框停止工作。

这是我正在使用的代码

output$view_data<-DT::renderDataTable({
    DT::datatable(Extraction(),rownames = FALSE,escape = FALSE,
        callback = JS(paste("
            var tips =",paste0("[",paste0("'",unlist(DrugFilter()),"'",collapse=","),"]"),",
            firstColumn = $('#view_data tr td:first-child');                                    
            for (var i = 0; i < tips.length; i++) 
                {$(firstColumn[i]).attr('title', tips[i]);}"
        ))
     ))
}, server = FALSE)

如何修改代码以使弹出框在所有表格页面上工作,而不仅仅是在第一个页面上?

【问题讨论】:

    标签: javascript r shiny paging dt


    【解决方案1】:

    我会尝试使用rowCallback

    rowCallback <- c(
      "function(row, data, displayNum, displayIndex){",
      sprintf("  var tips = [%s];", 
              paste0("'",unlist(DrugFilter()),"'",collapse=",")),
      "  for(var i = 0; i < tips.length; i++){",
      "    if(displayIndex== i){",
      "      $('td:eq(0)',row).attr('title', tips[i]);",
      "    }",
      "  }",
      "}"
    )
    
    datatable(Extraction(), 
              rownames = FALSE, 
              escape = FALSE, 
              options = list(
                rowCallback = JS(rowCallback)
              )
    )
    

    【讨论】:

    • 感谢@Stephane 的回答。我看到了改进,但它仍然无法正常工作。现在弹出框出现在表格的第一页以及其他页面中。但是当从一页移动到其他页面时,弹出框中的文本不会更新(即第 2、3、4 页中的行的弹出框文本......仍然与第一页中的行相同)
    • 我已经解决了将函数调用更改为:"function(row, data, displayNum, displayIndex)" 并在 if 语句中更改 "displayIndex" 中的 "index"。如果您编辑答案,我将批准它。感谢您的帮助
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2020-10-14
    • 2020-02-18
    • 1970-01-01
    • 2015-11-21
    • 2018-09-16
    • 2019-06-27
    • 2018-04-21
    相关资源
    最近更新 更多