背景
在我的应用中,我有一个登录页面,其中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)
答案 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))