Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在R Shining应用程序中加载模式对话框后,如何设置文本输入字段的焦点?_Javascript_R_Shiny - Fatal编程技术网

Javascript 在R Shining应用程序中加载模式对话框后,如何设置文本输入字段的焦点?

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

我正在构建一个条形码扫描仪应用程序,以验证主条形码标签是否与从主条形码生成的所有辅助条形码标签匹配。当前迭代使用R、shinny和modal对话框扫描条形码标签

我希望应用程序在模式弹出后自动聚焦文本输入字段,这样用户在扫描标签之前就不必单击输入字段或选项卡。我已经读到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", 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