简体   繁体   中英

How to disable button based on a condition in a R Markdown document with shiny elements?

Suppose we have a group of 8 checkboxes (8 letters) and an action button which prints the label of all the selected checkboxes. What I want to do, enable and disable the state of the action button based on a condition. The condition is that if the number of selected checkboxes are between 2 and 5, then the button should be enabled, else disabled. For changing the state of the button I want to use the functions enable , disable or toggleState functions from the shinyjs package. And when the button is enabled, I will be able to trigger an event to print the numbers of selected items. Here is what I tried until now:

---
title: "Disable Button"
runtime: shiny
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(shinyjs)
library(shiny)
```

```{r, echo=FALSE}
checkboxGroupInput("param_group", label = h3("Letters"), 
    choices = LETTERS[1:8])

actionButton('action', "Print")

result<-reactive({
  length(input$param_group)
})

observe({
  if(result()>1 & result()<=5)
    enable("action")
  else
    disable("action")
})

txt<-eventReactive(input$action,{
    cat("Number of letters selected: ",length(input$param_group))
})

renderPrint({
  txt()
})
```

Took me awhile to find it, but you have to enable shinyjs to use R-markdown explicitly, it needs to setup its javascript differently in this case.

You do this by calling: useShinyjs(rmd=T) in the chunk where you are using it.

---
title: "Disable Button"
runtime: shiny
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(shinyjs)
library(shiny)
```

```{r, echo=FALSE}
useShinyjs(rmd=T)

checkboxGroupInput("param_group", label = h3("Letters"), 
                   choices = LETTERS[1:8])

actionButton('action', "Print")


result<-reactive({
  length(input$param_group)
})

observe({
  useShinyjs()
  if(result()>1 & result()<=5){
    enable("action")
  } else {
    disable("action")
  }
})

txt<-eventReactive(input$action,{
  cat("Number of letters selected: ",length(input$param_group))
})

renderPrint({
  txt()
})

Screen shot:

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM