You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:18:49