2017-04-08 58 views
1

假设我们有一组8个复选框(8个字母)和一个打印所有选中复选框标签的动作按钮。我想要做什么,根据条件启用和禁用操作按钮的状态。条件是如果所选复选框的数量在2到5之间,那么应该启用该按钮,否则禁用该按钮。要更改按钮的状态,我想使用shinyjs包中的函数enabledisabletoggleState函数。当按钮被启用时,我将能够触发一个事件来打印所选项目的数量。 这里是我试过至今:如何根据R Markdown文档中闪亮元素的条件禁用按钮?

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

回答

1

花了一段时间来找到它,但你必须启用shinyjs明确地使用R-降价,它需要不同的设置它的JavaScript在这种情况下。

您可以通过在您正在使用它的块中调用useShinyjs(rmd=T)来完成此操作。

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

屏幕截图:

enter image description here

+0

这就是我一直在寻找。谢谢! – sanyi14ka

+1

不幸的是,'rmd = TRUE'是必需的,不能自动完成,因为我无法找到一个可靠的方法来知道它是从闪亮的应用程序还是从Rmd调用,因为它们之间有一条非常细的线。我问rstudio这件事,他们也找不到合适的解决方案,但那是2年前。如果你有一个想法如何做到这一点我打开的建议:) –