在textInput中选择文本/设置焦点

时间:2018-06-07 14:59:57

标签: r shiny

背景

在我的应用中,我有一个登录页面,其中textInput代表用户名,passwordInput代表密码,actionButton代表提交。如果无法识别密码/用户名,则会显示错误消息。到现在为止还挺好。我现在只想以编程方式选择/突出显示用户名textInput中的所有文本,如果登录不起作用。

问题

如何在用户名输入表单中选择文字?我查看了updateTextInput,但是我只能更改值,而不是选择。我需要回到javascript吗?

代码

library(shiny)

is_valid_user <- function(uid, pwd) {
   FALSE
}

ui <- fluidPage(
   textInput("uid", "Username:"),
   passwordInput("pwd", "Password"),
   actionButton("ok", "Login"),
   div(textOutput("error"))
)

server <- function(input, output, session) {
    observeEvent(input$ok, {
                 if (!is_valid_user(req(input$uid), req(input$pwd))) {
                    output$error <- renderText("Username/password incorrect!")
                    ## TODO: select all text in textInput("uid"), but HOW?
                 }})
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

嗨,我认为纯粹的闪亮无法做到。如果你愿意使用一些JS,这是一个简单的例子,它发送和处理从Shiny到JS(more here)的自定义消息。它基本上只选择输入中的文本,但是一旦你在JS方面,你基本上可以做你想要的任何事情。干杯!

library(shiny)

is_valid_user <- function(uid, pwd) {
  FALSE
}

ui <- fluidPage(
  tags$head(
    tags$script("
      Shiny.addCustomMessageHandler('selectText', function(message) {
        $('#uid').select();
      });
    ")
  ),
  textInput("uid", "Username:"),
  passwordInput("pwd", "Password"),
  actionButton("ok", "Login"),
  div(textOutput("error"))
)

server <- function(input, output, session) {
  observeEvent(input$ok, {
    if (!is_valid_user(req(input$uid), req(input$pwd))) {
      output$error <- renderText("Username/password incorrect!")
      ## TODO: select all text in textInput("uid"), but HOW?
      session$sendCustomMessage("selectText", "select")
    }})
}

shinyApp(ui = ui, server = server, options = list(port = 5555))