为何selectizeInput在server=FALSE时不自动选中首个可选值?
核心差异原因
官方文档描述的selected默认规则仅适用于服务端处理渲染的场景,server参数的取值直接决定了更新逻辑的执行端,两种模式的行为差异如下:
server=TRUE:选项列表、选中值逻辑全部在R服务端处理,完全遵循Shiny的selectizeInput参数规则:未指定selected时,单选列表自动选中choices的第一个元素,更新时会主动覆盖前端的旧值。server=FALSE:仅把新的选项列表传递给前端,由前端selectize.js组件自行处理更新。你在Select2的初始化参数中设置了onInitialize = I('function() { this.setValue(""); }'),前端组件更新选项时默认不会主动覆盖已设置的空值状态,因此会保留占位提示,不会自动选中首个选项。
解决方案
要让server=FALSE时的表现和server=TRUE一致,只需要在调用updateSelectizeInput时手动指定selected参数为选项列表的首个值即可,修改后的触发逻辑如下:
observeEvent(input$Select1, { avail_choices <- dat$Letter[dat$Number %in% input$Select1] updateSelectizeInput(session, inputId = "Select2", choices = avail_choices, selected = avail_choices[1], # 手动指定选中首个值 server = FALSE) })
该方案不会影响Select2的初始状态(未选择Select1时依旧显示占位提示),仅在有可选选项时自动选中首个值,和server=TRUE的表现完全一致。
内容的提问来源于stack exchange,提问作者www
相关产品推荐
相关产品推荐

