簡體   English   中英

帶有垂直單選按鈕的閃亮DT數據表

[英]shiny DT datatable with vertical radio button

我需要一個閃亮的DT數據表,該數據表中嵌入了單選按鈕。 這個應用程序顯示了針對水平按鈕的解決方案,因此我開始針對垂直情況進行調整。 矩陣很容易修改(請參見下面的代碼),但是由於缺乏JavaScript知識,我陷入了回調部分。 有任何想法嗎?

更新 :除非必須使用單選按鈕,否則使用DT中的行選擇功能會更容易,只需設置selection =“ single”,這樣就只能選擇一行。

library(shiny)
library(DT)
m = matrix(
  as.character(1:12), nrow = 12, ncol = 5, byrow = FALSE,
  dimnames = list(month.abb, LETTERS[1:5])
)
for (i in seq_len(ncol(m))) {
  #for (i in 1) {
  m[,i ] = sprintf(
    '<input type="radio" name="%s" value="%s"/>',
    LETTERS[i], m[,i]
  )
}

shinyApp(
  ui = fluidPage(
    title = 'Radio buttons in a table',
    DT::dataTableOutput('foo'),
    verbatimTextOutput('sel')
  ),
  server = function(input, output, session) {
    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(i, tab, row) {
                    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$sel = renderPrint({
      input[["A"]]
    })
    }
)
library(shiny)
library(DT)

m = matrix(
  as.character(1:12), nrow = 12, ncol = 5, byrow = FALSE,
  dimnames = list(month.abb, LETTERS[1:5])
)
for (i in seq_len(ncol(m))) {
  m[, i] = sprintf(
    '<input type="radio" name="%s" value="%s"/>',
    LETTERS[i], m[,i]
  )
}

callback <- c(
  "var LETTERS = ['A','B','C','D','E'];",
  "for(var i=0; i < LETTERS.length; ++i){",
  "  var L = LETTERS[i];",
  "  $('input[name=' + L + ']').on('click', function(){",
  "    var name = $(this).attr('name');",
  "    var value = $('input[name=' + name + ']:checked').val();",
  "    Shiny.setInputValue(name, value);",
  "  });",
  "}"
)

shinyApp(
  ui = fluidPage(
    title = 'Radio buttons in a table',
    DT::dataTableOutput('foo'),
    verbatimTextOutput('sel')
  ),
  server = function(input, output, session) {
    output$foo = DT::renderDataTable(
      m, escape = FALSE, selection = 'none', server = FALSE,
      options = list(dom = 't', paging = FALSE, ordering = FALSE),
      callback = JS(callback)
    )
    output$sel = renderPrint({
      input[["A"]]
    })
  }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM