Javascript 在R Shining应用程序中加载模式对话框后,如何设置文本输入字段的焦点?
我正在构建一个条形码扫描仪应用程序,以验证主条形码标签是否与从主条形码生成的所有辅助条形码标签匹配。当前迭代使用R、shinny和modal对话框扫描条形码标签 我希望应用程序在模式弹出后自动聚焦文本输入字段,这样用户在扫描标签之前就不必单击输入字段或选项卡。我已经读到JS focus函数可能是合适的,但是我不确定这个函数需要在哪里实现。谢谢你的帮助Javascript 在R Shining应用程序中加载模式对话框后,如何设置文本输入字段的焦点?,javascript,r,shiny,Javascript,R,Shiny,我正在构建一个条形码扫描仪应用程序,以验证主条形码标签是否与从主条形码生成的所有辅助条形码标签匹配。当前迭代使用R、shinny和modal对话框扫描条形码标签 我希望应用程序在模式弹出后自动聚焦文本输入字段,这样用户在扫描标签之前就不必单击输入字段或选项卡。我已经读到JS focus函数可能是合适的,但是我不确定这个函数需要在哪里实现。谢谢你的帮助 .libPaths(c(.libPaths(), temp <- tempdir())) if(!require(shiny)) {inst
.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", lib=temp, repos='http://cran.us.r-project.org')}
if(!require(shinyalert)) {install.packages("shinyalert", lib=temp, repos='http://cran.us.r-project.org')}
if(!require(devtools)) {install.packages("devtools", lib=temp, repos='http://cran.us.r-project.org')}
if(!require(shinyBarcode)) {devtools::install_github("CannaData/shinyBarcode")}
if(!require(shinyjs)) {install.packages("shinyjs", lib=temp, repos='http://cran.us.r-project.org')}
if(!require(V8)) {install.packages("V8", lib=temp, 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"),
footer = NULL,
actionButton("reset", "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)
.libPaths(c(.libPaths(),temp