使用JavaScript验证Shiny App中的字段

时间:2015-11-11 01:47:21

标签: shiny shinyjs

我想验证一个使用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中验证客户端表单的更好方法?)

1 个答案:

答案 0 :(得分: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()
    })
  }
))