当带有占位符、choices = NULL、selected = NULL 和 multiple = FALSE 的 selectizeInput 更新为具有长度 > 0 的一组选择时,占位符消失并且选择的第一个元素成为选定值。 我希望占位符保留并且 selected = NULL,因为只有选择被更新,而不是 selected 参数。
但是,如果 multiple = TRUE,则在添加选项时,占位符保持不变,并且 selected 保持为 NULL。
下面是一个最小的示例:当 UI 加载时,selectizeInput 有一个占位符,choices = NULL 和 multiple = FALSE。 当您选中该框时,服务器会将选项更新为 c("var1", "var2", "var3",但不会更新选择,但占位符会消失并且默认选择“var1”。即使发生这种情况我在 updateSelectizeInput 调用中指定 selected = NULL。
这是一个错误还是有意的? 有没有办法保留一个占位符并且没有选择多个= FALSE?
library(shiny)
ui <- shinyUI(fluidPage(
# Application title
titlePanel("selectizeInput demo"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
selectizeInput(
inputId = "variable",
label = h3("Treatment variable"),
choices = NULL,
multiple = FALSE,
selected = NULL,
options = list(placeholder = "This is a placeholder")
),
checkboxInput(
inputId = "add_choices",
label = "Add choices",
value = FALSE)
),
mainPanel = NULL
)
))
server <- shinyServer(function(input, output, session) {
observe({
if (input$add_choices) {
updateSelectizeInput(
session = session,
inputId = "variable",
choices = paste0("var", 1:3),
selected = NULL)
}
})
})
shinyApp(ui = ui, server = server)
看起来这可以通过设置 multiple = TRUE 但包括 selectize.js 选项 maxItems = 1 以某种落后的方式解决。占位符仍然存在,但项目数仍然限制为 1,就好像有效地 multiple = FALSE .
selectizeInput(
inputId = "variable",
label = h3("Treatment variable"),
choices = NULL,
multiple = TRUE,
selected = NULL,
options = list(
placeholder = "This is a placeholder",
maxItems = 1)
)
@mdec您的解决方案似乎是一种解决方法,我的猜测是开发人员可能想要修复底层错误。
是的,我会重新打开,因为这听起来值得修复。
事实证明,您可以使用selected=character(0)
而不是selected=NULL
来获取占位符。
selected = character(0), multiple = FALSE,
options = list(create = TRUE, placeholder = 'choose an option')
对我不起作用。 我不得不使用解决方法。 但是解决方法不允许我在使用更新 UI 时仅使用一个选项来实现键入
更新选择输入
一个“干净”的解决方案将是更可取的国际海事组织
最有用的评论
看起来这可以通过设置 multiple = TRUE 但包括 selectize.js 选项 maxItems = 1 以某种落后的方式解决。占位符仍然存在,但项目数仍然限制为 1,就好像有效地 multiple = FALSE .