闪亮的多选输入选择多次选择

时间:2018-02-22 16:31:29

标签: r shiny

在这个最小的例子中,我希望有一个选项可以选择不止一次,即产生输入值,例如: A,B,B,B,A,A,C

选项hideSelected = FALSE使所选选项仍然可见,但无法再次选择。

根据https://github.com/rstudio/shiny/issues/518选择中有这样的选项,但即使在这里我也找不到这样的选项:https://github.com/selectize/selectize.js/blob/master/docs/usage.md

server <- function(input, output, session) {
  output$multipleSelect <- renderUI({
    selectizeInput("selectMany",
                   label = "I want to select each multiple times",
                   choices = LETTERS[1:3],
                   multiple = TRUE,
                   options = list(hideSelected = FALSE))
  })
}

ui <- function() {
  fluidPage(
    uiOutput("multipleSelect")
  )
}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:1)

由于Shiny还没有实现这一点,如果您想坚持使用selectInput,解决方法是使用selectInput,但每次用户制作时都会清除选择选择。然后,您可以放置​​另一个DT输出以显示当前选定的元素,并让用户从那里删除元素。我仅使用verbertimTextOutput进行演示。

library(shiny)

ui <- fluidPage(
  selectInput(
    "selectMany",
    label = "Many",
    choices = LETTERS[1:3],
    multiple = TRUE
  ),
  verbatimTextOutput("debug")
)
server <- function(input, output, session) {

  elements <- reactiveVal(c())

  observeEvent(input$selectMany, {
    req(input$selectMany)
    elements(c(elements(), input$selectMany[[1]]))
  })

  observeEvent(elements(), {
    req(elements())
    updateSelectInput(session, "selectMany",
      selected = character(0),
      choices = LETTERS[1:3]
    )
  })

  output$debug <- renderPrint({
    print(elements())
  })
}


shinyApp(ui, server)

答案 1 :(得分:0)

我想出了一些将不可见空间添加到选择列表的好主意。我还通过添加&#34;来欺骗选择。 &#34; beggining选项,解决了删除最后一个元素时缺乏反应性的问题。 这是一个很好的工作 - 在添加项目时非常出色。

仍有两个无法解决的问题:

  • 下拉列表每次都关闭(由于输入需要更新,因此无法修复)
  • 删除项目时,下拉列表中有太多选项闪烁

代码:

library(ggplot2)

g <- ggplot(data=iris, aes(x=iris$Sepal.Length, y = iris$Sepal.Width))
g + geom_point()