1

我想验证一个关于使用 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 函数中的引号字符会被转换为&quotor &#39,这会导致语法错误。我尝试将字符串包装进去,HTML()但这似乎并没有改变这种行为。

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

4

1 回答 1

3

我会使用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()
    })
  }
))
于 2015-11-11T03:52:59.597 回答