仅以闪亮的方式显示错误消息

时间:2021-06-29 11:41:37

标签: r shiny

我是 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())
        
        
    })

1 个答案:

答案 0 :(得分:0)

我没有遵循你的例子,因为它不可复制。

要使事件只发生一次、两次或更多次,您可以初始化一个计数器并在达到计数器时停止该事件。

在这里,如果用户提交的数字 >=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)
相关问题