使用 JavaScript 验证 Shiny App 中的字段

Use JavaScript to validate a field in Shiny App

我想验证使用 JavaScript 的表单。我知道我可以 通过提供 onclick 参数向 actionButton 添加 onclick 方法,如下所示:

textInput('timeField', "Time",'12:00')
actionButton('okButton', 
        'OK',
         onclick="function(){ if(!(/^([01][0-9]|2[0-3]):([0-6][0-9])$/
                                 .test($('#timeField').val()))){
                                       alert('download time must be in 24 hour (HH:MM)
                                              fomrat.'); 
                                  return false; } }"))

但是,JavaScript 函数中的引号字符被转换为 &quot&#39,这会导致语法错误。我试过将字符串包装在 HTML() 中,但这似乎并没有改变这种行为。

有什么方法可以在 onclick 参数中包含一个原始字符串而不用 Shiny 转换它? (或者也许是在 Shiny App 中在客户端验证表单的更好方法?)

我会使用 shinyjs 在 JavaScript 中进行表单验证。我稍微更改了您的 JS 函数,因为我认为那里的验证代码不起作用。示例:

library(shiny)
library(shinyjs)

jscode <- HTML("
shinyjs.validate = function() {
  var regex = /([01]\d|2[0-3]):([0-5]\d)/;
  if(!regex.test($('#timeField').val())) {
    alert('download time must be in 24 hour (HH:MM) format.');
  }
}
")

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jscode),
    textInput('timeField', "Time",'12:00'),
    actionButton('okButton', 'OK')
  ),
  server = function(input, output, session) {
    observeEvent(input$okButton, {
      js$validate()
    })
  }
))