2016-03-21 17 views
4

Hier geklickt wird, ist ein funktionierendes Beispiel meines besten Versuchs Tabelle Click-Ereignis zu erhalten:fest, ob DT Datentabelle in glänzend App

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()) 
    })} 
)) 

Das Problem ist, dass observeEvent nur, wenn der Benutzer klickt auf der Zelle reagiert, die von dem unterscheidet, zuvor geklickt. Gibt es eine Möglichkeit, ein Ereignis bei einem Tabellenklick zu erhalten?

+0

Da die Ausgabe letztlich ein div auf der Webseite ist, stelle ich mir vor, dass Sie Javascript verwenden können, um ein div click-Ereignis zu fangen. –

Antwort

2

ich denke, es s

hilfreich sein können

Versuchen hinzufügen callback mit Shiny.onInputChange und smth hinzufügen, die alle Zeit verändert (rnd)

smt wie

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); 
    });") 

und es dann gerne verwenden:

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()) 

    })} 
)) 

Dann parse alle row und col von input$rows

PS. im Index der Databücher beginnen von 0.

+0

Großartig! Vielen Dank. –

+0

Wenn sich Ihre Tabelle auf mehreren Seiten befindet, bezieht sich die Eingabe $ rows [1] auf die Zeile der aktuellen Seite. Um die absolute Zeilennummer in 'observeEvent' zu erhalten, verwenden Sie' input $ table_rows_current [input $ rows [1] +1] ', siehe https://rstudio.ithub.io/DT/shiny.html – Valentas

Verwandte Themen