我有许多numericInputs放入DT数据表的几列中。我想允许用户单击一个按钮,然后将输入从第一列复制到其他列。我能够为不属于数据表的numericInputs工作,但数据表中的numericInputs没有任何反应。下面给出了我的问题的简化示例。我还提供了一个独立的numericInput的工作示例,它不是数据表的一部分,用于演示我正在寻找的行为。
library(shiny)
library(DT)
shinyApp(
server = shinyServer(function(input, output, session) {
output$Table <- DT::renderDataTable({
observeEvent(input$button1, {
v <- input$Number.1.1
updateNumericInput(session,"Number.2.1", value = v)
})
temp <- data.frame(c(1:5))
temp$Numbers.1 <- ""
temp$Numbers.2 <- ""
sapply(1:5, FUN = function(i){
temp$Numbers.1[i] <<- as.character(numericInput(paste0("Number.1.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
})
sapply(1:5, FUN = function(i){
temp$Numbers.2[i] <<- as.character(numericInput(paste0("Number.2.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
})
datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE))
})
observeEvent(input$button2,{
v <- input$Number.3
updateNumericInput(session,"Number.4", value = v)
})
}),
ui = fluidPage(
br(),
actionButton("button1","Copy"),
dataTableOutput("Table"),
br(),
actionButton("button2","Copy"),
numericInput("Number.3", "Number 3", value = NULL, min = 0, max = 10, step = 0.1),
numericInput("Number.4", "Number 4", value = NULL, min = 0, max = 10, step = 0.1)
)
)
我也尝试将observeEvent放在renderDataTable之外,但这没有用。由于该按钮适用于独立的numericInputs,我猜这是某种范围问题,但我一直无法弄清楚如何解决它。
提前感谢您的帮助!
答案 0 :(得分:0)
我解决了我的问题。 (事实证明我实际上知道答案,但是有一个大脑放屁。)renderDataTable({})中的datatable()函数应该是:
datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE,
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))