6

テーブルクリックイベントを取得するための私の最善の試みの実際の例を次に示します。

library(shiny)
library(DT)

runApp(shinyApp(
  ui = fluidPage(DT::dataTableOutput('table')),
  server = function(input, output, session) {
    output$table <- DT::renderDataTable({
      dt <- data.frame(a = 1)
      datatable(dt, rownames = FALSE, selection = 'none')
    })
    observeEvent(input$table_cell_clicked, {
      print(Sys.time())
    })}
))

問題は、observeEventユーザーが以前にクリックしたセルとは異なるセルをクリックした場合にのみ反応することです。テーブルのクリックでイベントを取得する方法はありますか?

4

1 に答える 1

9

私はそれが役立つかもしれないと思う

add callbackwithShiny.onInputChange と add smth を常に変更してみてください ( rnd)

SMTのように

   JS("table.on('click.dt', 'td', function() {
            var row_=table.cell(this).index().row;
            var col=table.cell(this).index().column;
            var rnd= Math.random();
            var data = [row_, col, rnd];
           Shiny.onInputChange('rows',data );
    });")

そしてそれを次のように使用します:

library(shiny)
library(DT)
runApp(shinyApp(
  ui = fluidPage(DT::dataTableOutput('table')),
  server = function(input, output, session) {
    output$table <- DT::renderDataTable({
      datatable(data.frame(a = c(1,2),b=c(2,3)), rownames = FALSE, selection = 'none', callback = JS("table.on('click.dt', 'td', function() {
            var row_=table.cell(this).index().row;
            var col=table.cell(this).index().column;
            var rnd= Math.random();
            var data = [row_, col, rnd];
           Shiny.onInputChange('rows',data );
    });")
      )}
    )

    observeEvent(input$rows, {
      print(input$rows)
      print(Sys.time())

    })}
))

row次に、すべてを解析しcolます input$rows

PS。データテーブルのインデックスは 0 から始まります。

于 2016-03-21T15:02:59.927 に答える