2016-03-21 22 views
4

をクリックされたかどうかを判断し、テーブルをクリックしてイベントを取得するための私の最高の試みの実施例である:DTのデータテーブルは、光沢のあるアプリでここ

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は、ユーザーが異なり、セルをクリックした場合にのみ反応することがあります前にクリックした。任意のテーブルクリックでイベントを取得する方法はありますか?

+0

出力は最終的にウェブページ上のdivなので、JavaScriptを使ってdivのクリックイベントを捕まえることができると思います。 –

答えて

2

私はそれがShiny.onInputChangecallbackを追加し、すべての時間(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()) 

    })} 
)) 

次に、すべてrowcolinput$rows

PSから解析します。データ型のインデックスは0から始まります。

+0

素晴らしい!ありがとうございました。 –

+0

テーブルが複数のページにある場合、入力$ rows [1]は現在のページの行を参照します。 'observeEvent'の絶対行番号を取得するには、' input $ table_rows_current [input $ rows [1] +1 ''、https://rstudio.github.io/DT/shiny.htmlを参照してください。 – Valentas

関連する問題