Shiny 使用JavaScript验证应用程序中的字段

Shiny 使用JavaScript验证应用程序中的字段,shiny,shinyjs,Shiny,Shinyjs,我想使用JavaScript验证表单。我知道我可以 通过提供如下所示的onclick参数,将onclick方法添加到actionButton: textInput('timeField', "Time",'12:00') actionButton('okButton', 'OK', onclick="function(){ if(!(/^([01][0-9]|2[0-3]):([0-6][0-9])$/

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

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函数中的引号字符会被转换为
'
,这会导致语法错误。我尝试过用
HTML()
包装字符串,但这似乎并没有改变这种行为

有没有办法在
onclick
参数中包含一个原始字符串,而不使用SHINK进行转换?(或者是在闪亮的应用程序中在客户端验证表单的更好方法?

我将使用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()
    })
  }
))
库(闪亮)
图书馆(shinyjs)

这是一个很好的解决方案,shinyjs看起来像一个方便的包。不幸的是,shiny不支持使用JS代码,这是IMHO的一个主要疏忽。第三方shiny软件包(或任何其他框架)的风险在于,当shiny最终更改其API时,使第三方软件包保持最新。shiny确实支持与JS通信,这就是我制作shinyjs软件包的方法。这并不是非常琐碎,也有点冗长,所以我决定制作一个软件包来简化这些内容。总的来说,我同意你的观点,但在这种特殊情况下,我非常怀疑Shiny会彻底改变JS通信的工作方式,并且可能不会破坏shinyjs。如果他们真的这么做了,我相信我会在大的变化发生之前就知道这一点,因为我有时会与shiny开发团队交谈,我相信他们会在大的突破性变化之前让shiny软件包所有者知道。所以在这种情况下,它应该是安全的:)