Javascript 闪亮数据表中的单选按钮;“次选择”;一列中的行数/分组数
我试图完成的与之类似,但稍微复杂一些 我想将单选按钮分为不同的组,但在一列中,这样就可以进行行的“子选择” 目前只有ID为“C”的单选按钮组工作,因为div元素是为整个表定义的。我试图通过javascript回调插入闪亮的标记,但我只能为每一行或每一列插入单选按钮,但不能为一列中多行的子集插入单选按钮 对javascript或闪亮的解决方案开放Javascript 闪亮数据表中的单选按钮;“次选择”;一列中的行数/分组数,javascript,r,shiny,dt,Javascript,R,Shiny,Dt,我试图完成的与之类似,但稍微复杂一些 我想将单选按钮分为不同的组,但在一列中,这样就可以进行行的“子选择” 目前只有ID为“C”的单选按钮组工作,因为div元素是为整个表定义的。我试图通过javascript回调插入闪亮的标记,但我只能为每一行或每一列插入单选按钮,但不能为一列中多行的子集插入单选按钮 对javascript或闪亮的解决方案开放 shinyApp( ui = fluidPage( title = 'Radio buttons in a table', tags
shinyApp(
ui = fluidPage(
title = 'Radio buttons in a table',
tags$div(id="C",class='shiny-input-radiogroup',DT::dataTableOutput('foo')),
verbatimTextOutput("test")
),
server = function(input, output, session) {
m = matrix(
c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F,
dimnames = list(month.abb, LETTERS[1:3])
)
m[, 2] <- rep(c("A","B","C", "D"), each= 3)
m[, 3] <- paste0('<input type="radio" name="', rep(c("A","B","C", "D"), each= 3),'" value="', month.abb,'"/>')
m[c(1,4,7,10), 3] <- gsub('/>', 'checked="checked"/>', m[c(1,4,7,10), 3], fixed = T)
m
output$foo = DT::renderDataTable(
m, escape = FALSE, selection = 'none', server = FALSE,
options = list(dom = 't', paging = FALSE, ordering = FALSE)
# callback = JS("table.rows().every(function() {
# var $this = $(this.node());
# $this.attr('id', this.data()[0]);
# $this.addClass('shiny-input-radiogroup');
# });
# Shiny.unbindAll(table.table().node());
# Shiny.bindAll(table.table().node());")
)
output$test <- renderPrint(str(input$C))
}
)
您可以将
div
元素相互嵌套,如下所示:
ui = fluidPage(
title = "Radio buttons in a table",
div(id = "A", class = "shiny-input-radiogroup",
div(id = "B", class = "shiny-input-radiogroup",
div(id = "C", class = "shiny-input-radiogroup",
div(id = "D", class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))
)
)
),
l <- unique(m[, 2])
for(i in 1:length(l)) {
if (i == 1) {
radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))
} else {
radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", radio_grp)
}
}
我还修改了renderText
,以便打印所有值
output$test <- renderPrint( {
str(input$A)
str(input$B)
str(input$C)
str(input$D)
})
谢谢,这很有魅力。但是如果我有100个组,那么嵌套这么多
div
元素明智吗?有可能动态嵌套这些吗?我不认为嵌套一些div
应该是个问题。至于“动态嵌套”,您可以为此编写一个循环。请看我的编辑。再次感谢!还有一个关于单选按钮在交互之前具有NULL
值的问题。当它们为NULL
时,我在observe()
中更改了它们的值。但是,如果我进行了选择或更改了任何内容(导致表重新呈现的原因),则在任何按钮中都不会显示为选中状态。但它们的输入值仍然相同。您知道如何使用默认值以这种方式渲染表,或者在每次渲染后将其视觉输出相应地更改为当前值吗?
l <- unique(m[, 2])
for(i in 1:length(l)) {
if (i == 1) {
radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))
} else {
radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", radio_grp)
}
}