我在我的Shiny项目中使用selectizeInput(带有multiple选项),并且遇到了一个问题,即一旦我搜索条件并在搜索栏中选择一个项目,我的搜索条件就会被删除并且我位于下拉菜单的开头。例如,在下面的示例中,假设我在搜索栏中输入“ 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)
答案 0 :(得分: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个项目时,给出以下输出:
答案 1 :(得分:1)
虽然pickerInput是一种解决方案,但对于那些希望坚持使用selectize的人,请考虑以下因素:
请从以下GitHub链接下载脚本(我将我的脚本保存为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)
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)