R - 禁用操作按钮,以列的名称为条件

时间:2017-01-26 12:36:14

标签: r shiny shinyjs

我的shiny应用的简化版本。我查看了shinyjs包中的一些示例,但没有找到任何可以帮助我的内容。

如果上传的一个数据框(在我的实例中)或选中的数据框具有特定的列名(下例中的Col 3),我想禁用Submit button

可以使用shinyjs完成吗?

library(rhandsontable)
library(shiny)
library(shinyjs)

df1 <- data.frame(col1 = rnorm(20),
                  col2 = rep(T, 20))

df2 <- data.frame(col1 = rnorm(20),
                  col2 = rep(F, 20),
                  col3 = rnorm(20))


server <- function(input, output) {

  values = reactiveValues()
  values[["df1"]] <- df1
  values[["df2"]] <- df2


  df <- reactive({
    if (input$df == "df1") {
      df <- values[["df1"]]
    } else {
      df <- values[["df2"]]
    }
    df
  })

  observeEvent(input$Submit, {
  shinyjs::alert("Thank you!")
})


#observe({
 # if (is.null(input$df) || input$df == "df1") {
  #  shinyjs::disable("submit")
  #} else {
   # shinyjs::enable("submit")
  #}
#})


  output$out <- renderRHandsontable({
    hot <- rhandsontable(df())
    hot
  })
}


ui <- fluidPage(
shinyjs::useShinyjs(),

sidebarLayout(sidebarPanel(
  selectInput(
    'df', 'Select data.frame:',
    choices = c('df1', 'df2'),
    selected = 'df1'
  ),
  actionButton("Submit", label = "Submit")
),
mainPanel(rHandsontableOutput("out"))))

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

首先,有一个小错字:注意大写“S”。

shinyjs::disable("Submit")

编辑:要检查“col3”,请使用以下代码:

  observe({
    if (is.null(input$df) || sum(colnames(df()) == "col3")) {
      shinyjs::disable("Submit")
    }else{
      shinyjs::enable("Submit")
    }
  })

当然,启用相同。