如何修改R Shiny selectizeInput的"Add..."文本并适配本地修改的selectize.js
自定义“Add...”提示文本的快速实现
该提示不需要修改selectize.js源码,Shiny的selectizeInput的options参数会直接透传所有selectize.js支持的初始化配置,直接在options中添加createLabel参数即可:
- 替换为自定义文本(例如法语提示):设置
createLabel = "Ajouter" - 完全移除该提示:设置
createLabel = ""
修改后的示例代码:
library(shiny) ui <- fluidPage( selectizeInput( inputId = "ABCother", label = "Select or create", choices = c("A", "B", "C"), options = list( create = TRUE, createLabel = "输入后回车添加该项" # 替换为所需文本,或设为""移除提示 ) ) ) server <- function(input, output){} shinyApp(ui, server)
自定义修改selectize.js后的全环境部署方案
如果需要批量修改selectize.js内部逻辑(例如批量适配多语言),可通过Shiny静态资源托管机制实现本地、Shiny.io平台的兼容,无需修改Shiny内置依赖:
- 在应用根目录下新建
www文件夹,该目录为Shiny默认的静态资源服务目录,本地运行和Shiny.io部署都会自动识别 - 将修改完成的selectize.js文件放入该
www文件夹内 - 在UI层先移除Shiny默认加载的selectize依赖,再引入自定义版本的js文件即可
完整示例代码:
library(shiny) ui <- fluidPage( # 移除Shiny默认加载的selectize依赖 suppressDependencies("selectize"), # 引入自定义的selectize.js文件 tags$head(tags$script(src = "selectize.js")), selectizeInput( inputId = "ABCother", label = "Select or create", choices = c("A", "B", "C"), options = list(create = TRUE) ) ) server <- function(input, output){} shinyApp(ui, server)
注意事项:
- 自定义js的引入代码必须放在
selectizeInput组件之前执行,避免加载顺序冲突 - 所有自定义静态资源统一放在
www目录下,无需额外配置路径,即可在本地和Shiny.io环境下正常访问
内容的提问来源于stack exchange,提问作者Geofc
相关产品推荐
相关产品推荐

