如何在Shiny中根据所选语言动态修改textAreaInput的占位符
动态更新Shiny文本区域的占位符内容
我需要将下拉选择的语言传递到textAreaInput的占位符中,实现占位符文本随所选语言动态变化的效果。
原应用代码
library(shiny) # 定义应用界面 ui <- fluidPage( selectInput("selectLanguage", "选择语言?", choices = c("EN", "ES", "FR")), textAreaInput(inputId = "desc", label = "用几句话描述自己", width = '100%', rows = 4, placeholder = "emailPlaceholder") ) # 定义服务器逻辑 server <- function(input, output) { ########################## 添加占位符 ############################# emailPlaceholder = reactive({ emailDescPlaceholder = paste("In ", input$selectLanguage, " write about yourself: ") }) output$emailPlaceholder = renderText({ emailPlaceholder() }) } # 运行应用 shinyApp(ui = ui, server = server)
预期效果
选择不同语言时,文本区域的占位符应分别显示:
- In EN write about yourself:
- In ES write about yourself:
- In FR write about yourself:
解决方案
原代码的问题在于,UI中的placeholder参数无法直接绑定server端生成的output值。正确的做法是使用updateTextAreaInput函数,在server端监听语言选择的变化,动态更新文本区域的占位符。
修正后的代码:
library(shiny) # 定义应用界面 ui <- fluidPage( selectInput("selectLanguage", "选择语言?", choices = c("EN", "ES", "FR")), textAreaInput(inputId = "desc", label = "用几句话描述自己", width = '100%', rows = 4) ) # 定义服务器逻辑 server <- function(input, output, session) { ########################## 动态更新占位符 ############################# observe({ updateTextAreaInput(session, "desc", placeholder = paste("In ", input$selectLanguage, " write about yourself: ") ) }) } # 运行应用 shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

