r - 仅在闪亮中显示错误消息一次
问题描述
我是 R 语言的新手。我无法找到解决我目前面临的问题的方法。我为用户制作了一个注册页面。每当用户单击“提交”按钮时,它都会检查是否满足特定条件。如果否,则显示错误消息。现在的问题是错误消息不断重复,直到用户输入正确的信息。每次用户单击按钮时,它也会重复。
无论用户单击“提交”按钮多少次,我都希望错误消息只显示一次。此外,当用户填写文本字段时,错误不应重复。这可能是一个愚蠢的问题,但我真的很感激一些帮助。我正在分享我的代码以便更好地理解问题。
ui <- fluidPage(
tags$style(
type = "text/css",
#".shiny-output-error",
" .has-error{color: #B31B1B;}"
),
#User Account
div(id ="account", actionBttn("OPEN"," Register",
color = "success", style = "gradient", icon = icon("user"))),
)
# Define server logic
server <- function(input, output) {
#User Account
#User-Registration Button
observeEvent(input$OPEN,{
showModal(modalDialog( id = "form",
h3(strong("User Sign-Up Portal"), align = "center"),
br(),
textInput("Username", "Enter Username:", value = "", placeholder = "Username"),
textInput("Email", "Enter Email:", value = "", placeholder = "Email"),
passwordInput("Password", "Enter Password:", value = "", placeholder = "Password"),
passwordInput("rePassword", "Retype Password:", value = "", placeholder = "Retype Password"),
easyClose = TRUE,
footer=tagList(
p("Already have an account ? Click to Sign In"),actionButton('signin', 'Sign-In'),
div(style = "margin-right: 300px", actionButton('submit', 'Submit'), actionButton("refresh", "Refresh"),
modalButton('cancel'))
)
)
)
}
)
observeEvent(input$submit,{
urname <- input$Username
uemail <- input$Email
upass <- input$Password
urepass <- input$rePassword
iv <- InputValidator$new()
result = fn$dbGetQuery(con, "Select Username from register where Username = '$urname'")
iv$add_rule("Username", sv_required())
iv$add_rule("Username", ~ if (!isValidFormat(.)) "The username must contain Atleast: 8 characters \n One Upper Case Letter \n One Lower case Character \n One special Character")
iv$add_rule("Username", function(un){
if (count(result) != 0){
"Username already exists. Please enter a unique Username!"
}
})
iv$add_rule("Username", function(unl){
if (str_length(unl) >= 21){
"The Username cannot exceed 20 characters!"
}
})
result1 = fn$dbGetQuery(con, "Select Email from register where Email = '$uemail'")
iv$add_rule("Email", sv_required())
iv$add_rule("Email", ~ if (!isValidEmail(.)) "Not a valid Emai!l")
iv$add_rule("Email", function(ue){
if (count(result1) != 0){
"Email already exists. Please enter a unique Email!"
}
})
iv$add_rule("Password", sv_required())
iv$add_rule("Password", ~ if (!isValidFormat(.)) "The password must contain Atleast: 8 characters \n One Upper Case Letter \n One Lower case Character \n One special Character")
iv$add_rule("Password", function(pass){
if (str_length(pass) <= 7){
"The password should have a minimum of 8 characters!"
}
})
iv$add_rule("Password", function(pass){
if (str_length(pass) >= 13){
"The password should have a maximum of 12 characters!"
}
})
iv$add_rule("rePassword", sv_required())
iv$add_rule("rePassword", function(repass) {
if (repass != upass) {
"Your password and retype password do not match!"
}
})
iv$enable()
req(iv$is_valid())
})
解决方案
我没有按照您的示例进行操作,因为它不可重现。
要使事件只发生一次、两次或更多,您可以初始化一个计数器并在达到该计数器时停止该事件。
在这里,如果用户提交的数字 >=5,我希望出现警报。每当单击按钮时,我都会将计数器增加一。警报需要计数器为 0,否则不会出现。计数器初始化为0,所以它出现一次,然后就不会再出现。
library(shiny)
library(shinyWidgets)
counter <- 0 #init counter
ui <- fluidPage(
useSweetAlert(),
actionButton(
inputId = "register",
label = "register"
)
)
# Define server logic
server <- function(input, output, session) {
rv <- reactiveValues(count=0)
observeEvent(input$register, {
showModal(
modalDialog(
id = "form",
textInput("input1", "Enter a number < 5", value = ""),
actionButton(
inputId = "submit",
label = "Submit"
)
)
)
})
observeEvent(input$submit,{
req(rv$count == 0)
rv$count <- rv$count+1
if(as.numeric(input$input1)>=5){
sendSweetAlert(
session = session,
title = "Error...",
text = "The number you ented is not < 5",
type = "error"
)
}
})
}
shinyApp(ui,server)
推荐阅读
- android - Firebase 不插入任何数据
- javascript - 在 Rails 应用程序中使用 Vue.js 显示谷歌地图
- javascript - 我如何从 div 顶部获取并添加到此 div 顶部 + 25?
- laravel - Laravel 6 onDelete->('set null') 不起作用
- r - 转换日期格式 r 编程
- kubernetes - Rabbitmq:如何创建 RABBITMQ_ERLANG_COOKIE
- r - 分离数据,基于聚类分析中的聚类
- javascript - 创建全局数组以从所有组件访问
- r - ggplot2:回归线上的逻辑回归点,而不是 0 和 1
- pandas - Pandas中电话号码出现日期之间的差异