我想验证一个使用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函数中的引号字符会转换为"
或'
,从而导致语法错误。我已经尝试在HTML()
中包装字符串,但这似乎并没有改变这种行为。
有没有办法在onclick
参数中包含原始字符串而不是由Shiny变换? (或者可能是在Shiny App中验证客户端表单的更好方法?)
答案 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()
})
}
))