使用 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 函数中的引号字符被转换为 "
或 '
,这会导致语法错误。我试过将字符串包装在 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()
})
}
))
我想验证使用 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 中在客户端验证表单的更好方法?)
我会使用 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()
})
}
))