Shiny应用中DT表格按钮第二次点击无响应问题求助
问题原因
这个问题确实和Shiny的输入绑定机制直接相关:
- Shiny默认只会在输入值发生变化时,才会将前端的输入变更同步到后端、触发对应的观察者逻辑。
- 你当前使用的
Shiny.onInputChange("select_button", this.id)逻辑,第一次点击按钮时,select_button的值从空变为对应按钮ID,触发observeEvent;当你再次点击同一个按钮时,传给select_button的ID和上次完全一致,Shiny判定值没有变化,就不会触发后端的观察逻辑,所以点击无响应。
修复方案
只需要给Shiny.onInputChange添加第三个参数{priority: "event"}即可。这个参数的作用是告诉Shiny,每次调用都视为一次独立事件,无论传入的值是否和上一次相同,都会强制触发后端的观察者。
需要修改的代码段:
原onclick配置:
onclick = 'Shiny.onInputChange("select_button", this.id)'
修改后:
onclick = 'Shiny.onInputChange("select_button", this.id, {priority: "event"})'
修复后完整可运行代码
library(shiny) library(DT) ui <- fluidPage( DTOutput("df") ) server <- function(input, output, session) { shinyInput <- function(FUN, len, id, ...) { inputs <- character(len) for (i in seq_len(len)) { inputs[i] <- as.character(FUN(paste0(id, i), ...)) } inputs } output$df <- renderDT({ iris$Edit = shinyInput(actionButton, nrow(iris), 'button_', label = "Edit", onclick = 'Shiny.onInputChange("select_button", this.id, {priority: "event"})' ) datatable(iris, escape = F) }) observeEvent(input$select_button,{ selectedRow <- as.numeric(strsplit(input$select_button, "_")[[1]][2]) showModal(modalDialog( title = "Edit", size = "l", fluidPage(width = 12,fluidRow( column(width = 3,selectedRow) )), footer = tagList(modalButton("Cancel"),actionButton("update", "Update")))) }) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

