【问题标题】:Retain Selection Criteria in Selectize在 Selectize 中保留选择标准
【发布时间】:2020-11-03 01:13:50
【问题描述】:

我在我的 Shiny 项目中使用 selectizeInput(带有多个选项),我遇到了一个问题,一旦我搜索条件并在搜索栏中选择一个项目,我的搜索条件就会被删除我被放置在下拉菜单的开头。例如,假设我在下面的示例中的搜索栏中输入“27”。下拉菜单中应该有两个项目。在我选择两者之一后,我希望它仍然存在过滤器,并让我保留其他可用的项目,而无需我再次输入“27”。

我知道这是 selectize 的正常行为,但有没有办法在选择项目后保持搜索条件和下拉菜单存在?​​

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)

【问题讨论】:

    标签: r shiny selectize.js


    【解决方案1】:

    在这种情况下,您应该使用 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 个项目时给出此输出:

    【讨论】:

    • 非常感谢您的回复!我需要澄清情况:假设我在搜索栏中输入“27”。下拉菜单中应该有两个项目。在我选择两者中的一个之后,我希望它仍然存在过滤器,并让我保留另一个可用的项目,而无需我再次输入“27”。
    • 我考虑过使用pickerInput,但如果可能的话我想使用selectize。
    【解决方案2】:

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

    1. 请在以下 GitHub 链接下载脚本(我将我的保存为 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. 如果您计划在基于服务器端的选择中使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2011-12-10
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      相关资源
      最近更新 更多