【问题标题】:Simple javascript within DT Shiny. Printing value of actionButton embedded inside DTDT Shiny 中的简单 javascript。嵌入在 DT 中的 actionButton 的打印值
【发布时间】:2018-08-28 09:51:56
【问题描述】:

我有以下脚本,旨在打印出被单击/选中的按钮或框的行。复选框的小 javascript 代码(灵感来自另一个 SO 答案)工作得很好。但由于我是 javascript 的新手,我找不到 actionButton 的有效模拟。

library(DT)
library(glue)

ui <- fluidPage(
uiOutput("modal"),
fluidRow(
  verbatimTextOutput("value1"),
verbatimTextOutput("value2"),
  column(12,
         DT::dataTableOutput('table'),  tags$script(HTML('$(document).on("click", "input", function () {
                   var checkboxes = document.getElementsByName("selected");
                   var checkboxesChecked = [];
                   for (var i=0; i<checkboxes.length; i++) {
                   if (checkboxes[i].checked) {
                   checkboxesChecked.push(checkboxes[i].value);
                  }
                  }
                 Shiny.onInputChange("checked_rows",checkboxesChecked);

                   var buttons = document.getElementsByName("modified");
                   var buttonsPressed = [];
                   for (var i=0; i<buttons.length; i++) {
                   if (buttons[i].click) {
                   buttonsPressed.push(buttons[i].value);
                  }
                  }
                 Shiny.onInputChange("pressed_rows",buttonsPressed);   
        })
    '))
  )))

server <- function(input, output, session) {
df <- reactiveValues( data = data.frame(rownum = 1:5, stringsAsFactors = FALSE))
output$value1 <- renderPrint({ input$checked_rows }) 
output$value2 <- renderPrint({input$pressed_rows})
output$table <- DT::renderDataTable({
  df$data[["Select"]] <- glue::glue('<input type="checkbox" name="selected" value="{1:nrow(df$data)}"><br>')
  df$data[["Modify"]] <- glue::glue('<input type="button" name="modified" value="{1:nrow(df$data)}"><br>')

  DT::datatable(df$data,rownames=F, escape = FALSE, select = "none")

}) 

}

shinyApp(ui, server)

非常感谢任何帮助!

【问题讨论】:

    标签: javascript r shiny dt


    【解决方案1】:

    希望对你有帮助:

    library(shiny)
    library(DT)
    library(tidyverse)
    library(shinyjs)
    
    ui <- fluidPage(useShinyjs(), # for use js
      DT::dataTableOutput("row"),
      tags$script("$(document).on('click', '#row button', function () {
                  Shiny.onInputChange('lastClickId',this.id);
                  Shiny.onInputChange('lastClick', Math.random())
                  });") # use js
    )
    
    server <- function(input, output, session) {
      output$row<-renderDataTable({
    
          DT=mtcars%>%rownames_to_column()
          DT[["Action"]]<-
            paste0('<div class="btn-group" role="group" aria-label="Basic example">
                    <button type="button" class="btn"id=action_',DT$rowname,'>Action</button>
                  </div>')
    
    
        datatable(DT,escape=F,selection="none")})
    
      observeEvent(input$lastClick,
                   {if ( grepl("action_",input$lastClickId)){
    
                     showModal(modalDialog(easyClose = T,
                                           span("OKAY") ,
                                           footer = tagList(
                                             modalButton("Cancel"),
                                             actionButton("ok_post", "OK",  class="btn btn-success")
                                           )
                     ))
                   }
                     print(input$lastClickId)
                     })
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2020-08-16
      • 1970-01-01
      • 2017-01-21
      • 2022-10-25
      • 2016-01-17
      • 2018-08-16
      • 2015-08-20
      相关资源
      最近更新 更多