【发布时间】:2020-02-29 18:50:37
【问题描述】:
我正在尝试在 R 中创建一个带有分页的数据表,并带有预先选择的复选框。其他示例(例如here)不考虑分页。
在以下示例中,当您返回页面时,复选框状态会被重置。此外,excludedrows 变量不计算在其他页面上检查的行数。
library(shiny)
library(DT)
ui = fluidPage(
tags$script(HTML('$(document).on("click", "input", function () {
var checkboxes = document.getElementsByName("row_selected");
var checkboxesChecked = [];
for (var i=0; i<checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i].value);
}}
Shiny.onInputChange("checked_rows",checkboxesChecked);
})')),
verbatimTextOutput("excludedRows"),
DTOutput('myDT')
)
server = function(input, output) {
mymtcars_reactive <- reactive(mtcars)
output$myDT <- renderDataTable({
mymtcars <- mymtcars_reactive()
mymtcars[["Select"]] <- paste0('<input type="checkbox" name="row_selected" value=',1:nrow(mymtcars),' checked>')
datatable(mymtcars,selection = "multiple",
options = list(pageLength = 14,
lengthChange = FALSE,
stateSave = TRUE),
rownames= FALSE,
escape=F)
})
output$excludedRows <- renderPrint({
intersect(input$checked_rows,1:nrow(mymtcars_reactive()))
})
}
shinyApp(ui,server, options = list(launch.browser = TRUE)
【问题讨论】:
-
您是否尝试在
DT::renderDataTable中设置server = FALSE? -
server = FALSE解决了checked状态被重置的问题,但是没有给出正确的input$checked_rows值,仍然只统计当前页面的checked items。