在 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 的人,请考虑以下几点:
请在下面GitHublink下载脚本(我保存为preserve_search.js):https://github.com/selectize/selectize.js/issues/878#issuecomment-380382697
如果您计划使用 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)
- 如果您计划在基于服务器端的 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)
我正在使用 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 的人,请考虑以下几点:
请在下面GitHublink下载脚本(我保存为preserve_search.js):https://github.com/selectize/selectize.js/issues/878#issuecomment-380382697
如果您计划使用 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)
- 如果您计划在基于服务器端的 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)