在 Selectize 中保留选择标准

Retain Selection Criteria in Selectize

我正在使用 selectizeInput(带有多个选项)作为我的 Shiny 项目的一部分,我 运行 遇到了一个问题,一旦我搜索了一个条件并且 select 搜索栏中的一个项目,我的搜索条件被删除,我被放置在下拉菜单的开头。例如,假设我在下面的示例中的搜索栏中输入“27”。下拉列表中应该有两个项目。在我 select 两者之一之后,我希望过滤器仍然存在并让我可以使用另一个项目,而无需我再次输入“27”。

我知道这是 selectize 的正常行为,但是有没有办法在 selected 项目后保留搜索条件和下拉列表?

library(shiny)

ui <- function(id){
  selectizeInput(
    inputId = "test",
    label = NULL,
    choices = mtcars,
    options = list(placeholder = "None selected."),
    multiple = TRUE)
}

server <- function(input, output, session){}

shinyApp(ui, server)

在这种情况下,您应该使用 pickerInput。以下代码

ui <- fluidPage(
  pickerInput(
    inputId = "pick", label = "Selected",
    choices = mtcars,
    multiple = TRUE,
    options = list( `live-search` = TRUE, `actions-box` = TRUE),
    choicesOpt = list(`style` = "btn-info",
                      `liveSearchPlaceholder`="Search" 
    )
  )
)

server <- function(input, output, session){}

shinyApp(ui, server)

在搜索框中输入 27 并选择 2 个项目时给出此输出:

虽然 pickerInput 是一个解决方案,但对于那些想坚持使用 selectize 的人,请考虑以下几点:

  1. 请在下面GitHublink下载脚本(我保存为preserve_search.js):https://github.com/selectize/selectize.js/issues/878#issuecomment-380382697

  2. 如果您计划使用 Selectize 的客户端版本,请编辑以下脚本以满足您的需求:

addPreserveSearch <- function(x) {
  preserve_search <- htmlDependency("preserve_search", "1.0","location_of_your_script_folder",
                                script = "preserve_search.js")
  
  attachDependencies(x, c(htmlDependencies(x), list(preserve_search)))
}

library(shiny)

ui = fluidPage(
  
  addPreserveSearch(selectizeInput(
    inputId = "test",
    label = NULL,
    choices = mtcars,
    options = list(plugins = list('preserve_search')),
    multiple = TRUE))
)

server <- function(input, output, session){}

shinyApp(ui, server)

  1. 如果您计划在基于服务器端的 selectize 上使用 preserve_search,请考虑以下事项:
addPreserveSearch <- function(x) {
  preserve_search <- htmlDependency("preserve_search", "1.0","location_of_your_script_folder",
                                script = "preserve_search.js")
  
  attachDependencies(x, c(htmlDependencies(x), list(preserve_search)))
}


library(shiny)

ui = fluidPage(
  
  addPreserveSearch(selectizeInput(
    inputId = "test",
    label = NULL,
    choices = NULL,
    multiple = TRUE))
)

server <- function(input, output, session){
  
  updateSelectizeInput(
    session, inputId = "test",
    label = NULL, 
    choices = iris$Species,
    options = list(plugins = list('preserve_search')),
    server = TRUE)
}

shinyApp(ui, server)