Выберите текст / установите фокус в textInput - PullRequest
0 голосов
/ 07 июня 2018

Фон

В моем приложении у меня есть страница входа с 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 голосов
/ 07 июня 2018

Привет, я думаю, что нет никакого способа обойтись в чистом сиянии.Если вы хотите использовать JS, вот простой пример, который отправляет и обрабатывает пользовательское сообщение из Shiny в JS ( здесь ).По сути, он выбирает только текст на входе, но если вы находитесь на стороне 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...