2013-10-26 62 views
23

我正在尋找一種方法來實施禁用/ abling功能通過shinyUI元素Herexiaodaigh給出了一個提示如何禁用/能夠actionButton(見下圖),這是我想要的結果,但代碼沒有與我測試過的其他gui元素(例如numericInput)做伎倆。R閃亮 - 禁用/能夠shinyUI元素

(我知道conditionalPanel功能,但是這不是我想有效果。)

我要強烈感謝任何建議,特別是因爲我沒有太多熟悉JavaScript

enter image description here

回答

2

約當你的元素「消失」時,一定條件下是假的。

如果這是你的目的,你可以添加到您的server.R這

output$sliderInputUI <- renderUI({ 
    if (condition == TRUE) { 
     sliderInput("id", "text", 
      min = 1, max = 8, 
      value = 1, step = 1 
     ) 
    } 
}) 

添加到您的ui.R htmlOutput( 「sliderInputUI」)

sliderInput將僅出現在你的ui當條件爲TRUE時。

+0

你怎麼稱呼的「ID」,當條件不滿足?當您引用不存在的輸入變量時,閃亮似乎會產生錯誤。 – Sweetbabyjesus

+1

您可以使用'if(!is.null(input $ id))'引用不存在的輸入變量。 – tnaake

+0

ui中引用​​的sliderInputUI如何?答:uiOutput(「sliderInputUI」) – PeterVermont

27

您在問題中鏈接到的代碼對其他輸入窗口小部件無效的原因是,不同的輸入窗口小部件需要不同的JavaScript調用才能禁用。另一個問題是,當閃亮創建一個輸入元素時,有時您提供的id是實際的HTML輸入標記的ID,而有時該ID會被賦予輸入標記的容器。

shinyjs包中有一個disable函數,它可以像任何閃亮輸入一樣工作。免責聲明:我寫了這個包。

這裏是你將如何實現禁用numericInput就像你問

library(shiny) 
runApp(shinyApp(
    ui = fluidPage(
    shinyjs::useShinyjs(), 
    numericInput("test", "Test", 5), 
    actionButton("submit", "Choose") 
), 
    server = function(input, output, session) { 
    observeEvent(input$submit, { 
     shinyjs::disable("test") 
    }) 
    } 
)) 
+1

這是一個很棒的包,謝謝! – Cauchy

+0

有沒有辦法在'selectInput()'小部件中做一個特定選擇?按照你的說明,它看起來像禁用了我的'radioButtons()'小部件,無論在'selectInput()'小部件中選擇了哪個選項,因爲服務器的輸入並不依賴於答案選項。 – syntonicC

+0

不幸的是,您無法禁用/啓用輸入內的特定選項。這是真正的複選框,收音機,選擇等。這是因爲整個輸入有一個ID,但具體的選項不 –