2017-04-08 59 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年前。如果你有一個想法如何做到這一點我打開的建議:) –