如何解决在R Shiny应用程序中加载模式对话框后,如何设置对文本输入字段的关注?
我正在构建条形码扫描仪应用程序,以验证主条形码标签是否与从主条形码生成的所有辅助条形码标签匹配。当前迭代使用R,闪亮和模式对话框来扫描条形码标签。
我希望应用程序在弹出模式后自动聚焦在文本输入字段上,以便用户在扫描标签之前不必单击输入字段或标签。我已经读过JS focus函数可能合适,但是我不确定该函数需要在哪里实现。感谢您的帮助。
.libPaths(c(.libPaths(),temp <- tempdir()))
if(!require(shiny)) {install.packages("shiny",lib=temp,repos='http://cran.us.r-project.org')}
if(!require(shinyWidgets)) {install.packages("shinyWidgets",repos='http://cran.us.r-project.org')}
if(!require(shinyalert)) {install.packages("shinyalert",repos='http://cran.us.r-project.org')}
if(!require(devtools)) {install.packages("devtools",repos='http://cran.us.r-project.org')}
if(!require(shinyBarcode)) {devtools::install_github("CannaData/shinyBarcode")}
if(!require(shinyjs)) {install.packages("shinyjs",repos='http://cran.us.r-project.org')}
if(!require(V8)) {install.packages("V8",repos='http://cran.us.r-project.org')}
library(shiny)
library(shinyWidgets)
library(shinyalert)
library(shinyBarcode)
library(shinyjs)
library(V8)
options(shiny.sanitize.errors = TRUE)
options(rsconnect.max.bundle.size="xxxlarge")
ui <- fluidPage(
# must include javascript dependencies
useShinyalert(),# Set up shinyalert
shinyBarcode::includeJsBarcode(cdn = TRUE),shinyBarcode::barcodeOutput("barcode"),useShinyjs(),extendShinyjs(script = "beep.js"),extendShinyjs(script = "beep2.js"),)
server <- function(input,output,session) {
vals <- reactiveValues(txt = NULL)
# Create modals
primary <- function(failed = FALSE) {
modalDialog(
textInput("txt","Scan primary tube"),footer = NULL,actionButton("reset","Reset")
)
}
secondary <- function(failed = FALSE) {
modalDialog(
textInput("txt2","Scan secondary tube"),"Reset")
)
}
# Show modal on startup
showModal(primary())
observeEvent(input$txt,{
if (!is.null(input$txt) && nzchar(input$txt)) {
vals$txt <- input$txt
removeModal()
showModal(secondary())
} else {
showModal(primary(failed = TRUE))
}
})
observeEvent(input$txt2,{
if (!is.null(input$txt2) & nzchar(input$txt2) & input$txt2!="Reset") {
vals$txt2 <- input$txt2
removeModal()
if (vals$txt2==vals$txt) {
js$beep()
showModal(secondary())
}
else if (vals$txt2!=vals$txt) {
js$beep2()
shinyalert("Error","Primary and secondary labels do not match",type = "error")
showModal(secondary())
}
} else if (!is.null(input$txt2) & nzchar(input$txt2) & input$txt2=="Reset"){
showModal(primary())
} else {
showModal(secondary(failed = TRUE))
}
})
observeEvent(input$reset,{
showModal(primary())
})
output$barcode <- shinyBarcode::renderBarcode(vals$txt)
}
shinyApp(ui = ui,server = server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。