Shiny中如何不使用passwordInput将textInput输入内容替换为***
实现方法
只需要修改textInput生成的HTML输入框的type属性为password即可实现掩码效果,不需要替换为passwordInput控件,输入的真实值依然可以通过input$控件ID正常获取,和普通textInput的取值逻辑完全一致。
提供两种可直接运行的实现方案:
- 方案一:UI侧直接修改属性(无需额外JS)
用htmltools内置的tagQuery在UI渲染阶段直接修改输入框属性,代码最精简:
if (interactive()) { library(shiny) ui <- fluidPage( tagQuery(textInput("caption", "Caption", "Data Summary"))$ find("input")$ addAttrs(type = "password")$ allTags(), verbatimTextOutput("value") ) server <- function(input, output) { output$value <- renderText({ # 输出真实输入值,掩码仅影响前端显示 paste("输入的真实内容:", input$caption) }) } shinyApp(ui, server) }
- 方案二:通过前端JS动态修改属性
如果需要后续动态切换掩码/明文显示状态,可以在页面加载时通过JS修改属性:
if (interactive()) { library(shiny) ui <- fluidPage( textInput("caption", "Caption", "Data Summary"), tags$script(HTML(" $(function(){ $('#caption').attr('type', 'password'); }) ")), verbatimTextOutput("value") ) server <- function(input, output) { output$value <- renderText({ input$caption }) } shinyApp(ui, server) }
两种方案的掩码效果和原生密码输入框完全一致,输入内容会显示为
****,不会改变textInput原有的事件绑定、值传递逻辑,服务端可以正常拿到完整输入内容。
内容的提问来源于stack exchange,提问作者asdf1212
相关产品推荐
相关产品推荐

