You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny中DataTable重绘后JS回调函数失效问题求助

R Shiny中DataTable重绘后右键上下文菜单无法获取行数据问题

问题现象

  • 开发的R Shiny应用实现了右键点击DataTable任意行弹出上下文菜单,菜单选项可打印该行数据
  • 应用首次启动时,上下文菜单及功能完全正常;但点击“Update table”按钮重绘DataTable后,右键菜单仍能弹出,点击选项后却仅显示undefined,无法获取实际行数据

问题分析与尝试

  • 推测重绘后DataTable的ID被覆盖,回调函数通过selector: '#mytable tr'无法正确指向新创建的表元素
  • 实际应用场景需要完整重建DataTable,无法使用proxyDataTables方案;尝试过drawCallback函数也未解决问题
  • 预期目标:DataTable重绘后,右键上下文菜单的回调函数仍能正常获取并显示行数据

可复现代码

library(shiny)
library(DT)

c1 <- c(
"$.contextMenu({",
"selector: '#mytable tr',",
"trigger: 'right',",
"callback: function(key, options) {",
"var row = table.row(options.$trigger);",
"var data = row.data();",
"var m = 'clicked: ' + key + ' ' + data;",
"var newtab = window.open('','anotherWindow', 'width=750,height=600');",
"newtab.document.write('<p> Below is the row data! </p>', '<br>',data);",
"},",
"items: {",
"'showdata': {name:'Show row data', icon: 'fa-regular fa-folder'},
"'showsamedata': {name:'Show same row data again', icon: 'fa-regular fa-folder'}",
"}",
"})"
)

ui <- fluidPage(
  tags$head(
    tags$link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.css"),tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.js"),tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.ui.position.js"),tags$script(src="https://kit.fontawesome.com/293ef49cbe.js")
  ),
  DTOutput("mytable"),
  actionButton(inputId = "update",
           width = "150px",
           #style = "height:35px;border:3px;border-style:double;border-color:black;",
           label = div(style="vertical-align:middle;font-weight:bold","Update table"))
 )

 server <- function(input, output) {

#initial rendering
  output$mytable <- renderDataTable({
    datatable(iris, callback = JS(c1))
  })

#re-rendering
  observeEvent(input$update, {
    output$mytable <- renderDataTable({
      datatable(iris, callback = JS(c1))
    })
  })
}

shinyApp(ui, server)

效果说明

  • 首次加载:右键点击行,选择菜单选项后可正常显示该行数据
  • 重绘后:右键点击行,选择菜单选项后仅显示undefined

内容的提问来源于stack exchange,提问作者michel dangov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:03:18