在selectinput下拉列表中禁用项目

时间:2018-10-15 18:48:32

标签: shiny

如何禁用selectInput()下拉菜单中的项目?

例如;

library(shiny)
ui <- fluidPage(selectInput("id1","Select",choices=c("A","B","C")))
server <- function(input, output) {}
shinyApp(ui, server)

enter image description here

说,出于某种原因,由于某些逻辑,无法选择选项 C 。我希望用户能够看到所有选项,但已禁用/取消选择 C 选项。

2 个答案:

答案 0 :(得分:2)

您可以使用shinyWidgets软件包中的pickerInput来完成此操作:

library(shiny)
library(shinyWidgets)
ui <- fluidPage(
  pickerInput(
    inputId = "id1",
    label = "Select :",
    choices = c("A", "B", "C"),
    multiple = FALSE,
    choicesOpt = list(
      disabled = c("A", "B", "C") %in% c("C")
    )
  ),
  verbatimTextOutput(outputId = "result")
)
server <- function(input, output) {
  output$result <- renderPrint(input$id1)
}
shinyApp(ui, server)

在服务器上也可以这样做,请参见?updatePickerInput

中的示例

答案 1 :(得分:-1)

我相信只有标准的光泽才能做到。如果知道,您可以尝试应用一些CSS / JS魔术(例如,将无法选择的项目变成红色,如果用户仍然选择它,则向用户发送消息,或者您可以直接禁用使用JS / CSS对其进行点击,不确定,请参见sendCustomMessage())。

另一种选择是在需要时使用updateSelectInput()从下拉列表中丢弃不需要的项目。

更新:

我对此进行了快速搜索-我可以看到它可以使用html选项disabled,例如

<select>
  <option value="volvo" disabled>Volvo</option>
  <option value="saab">Saab</option>
  <option value="vw">VW</option>
  <option value="audi">Audi</option>
</select>

您需要做的就是在服务器上生成闪亮的selectInput(可能是renderUI()),并将该disabled选项添加到您需要禁用的元素中