javascript - Meteor - 自定义注册。显示所有验证错误而不是一个

标签 javascript meteor

这是我的 JS(meteor)代码:

  Template.register.events({
    'submit #register-form': function(event, template) {
      event.preventDefault();
      //Reset sessions
      Session.set("PwFieldErr", false);
      Session.set("EmFieldErr", false);

      // Get input values
      var email = template.find('#account-email').value,
          password = template.find('#account-password').value,
          repeatPassword = template.find('#confirm-password').value;

      // Check if inputs not empty

      // Trim Email
      var trimInput = function(val) {
        return val.replace(/^\s*|\s*$/g, "");
      }
      var email = trimInput(email);

      // Validate Email
      var emailRe = new RegExp("^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(?:aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[a-z][a-z])$");
      var isValidEmail = function(val) {
        if (emailRe.test(val)) {
          return true;
        } else {
          sAlert.error('Invalid email!');
          Session.set("EmFieldErr", true);
          return false;
        }
      }

      // Validate Password
      var re = /^(?=.*\d)(?=.*[a-zA-Z]).{6,}$/;
      var isValidPassword = function(val, rval) {
        if (re.test(val) && val == rval) {
          return true;
        } else if (!re.test(val)) {
          sAlert.error('Your password must be at least 6 characters long and contain at least 1 number');
          Session.set("PwFieldErr", true);
          return false;
        } else if (rval != val) {
          sAlert.error('Your passwords does not match');
          Session.set("PwFieldErr", true);
          return false;
        }
      }

      // If Password ok -> Register user
      if (isValidEmail(email) && isValidPassword(password, repeatPassword)) {
        Accounts.createUser({
          email: email,
          password: password
        }, function(error) {
          if (error) {
            // Inform the user that account creation failed
            sAlert.error(error.reason);
          } else {
            // Success. Account has been created and the user
            // has logged in successfully.
            sAlert.success('Account created successfully');
          }
        });
      }
      return false;
    }
  });

目前,此代码在返回第一个 false 后停止,因此如果返回 false,则 isValidPassword 函数甚至不会触发之前的 isValidEmail 函数。 如何进行所有验证检查,然后向用户显示所有验证错误?我假设我应该只使用一个返回 truefalse,那么我应该再创建一个函数来显示所有验证错误消息并返回 true

最佳答案

只需将调用弹出到它们自己的变量中即可:

  var validEmail = isValidEmail( email );
  var validPW = isValidPassword( password, repeatPassword );

  if (validEmail && validPw) {
    Accounts.createUser({
      email: email,
      password: password
    }, function(error) {
      if (error) {
        // Inform the user that account creation failed
        sAlert.error(error.reason);
      } else {
        // Success. Account has been created and the user
        // has logged in successfully.
        sAlert.success('Account created successfully');
      }
    });
  }

关于javascript - Meteor - 自定义注册。显示所有验证错误而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35706883/

相关文章:

javascript - 如何打开 Bootstrap Carousel 幻灯片以在滚动时更改?

javascript - JQuery.live() 无法正常工作

javascript - 为什么在 meteor /蒙戈中观察 oplog 需要这么多时间?

meteor - 错误 : Cannot find module 'paypal-ipn'

javascript - Meteor:在 Controller 和助手之间共享/传递变量(差异文件)

javascript - 字符串无法解析为 HTML

javascript - setInterval 无法正常工作

javascript - 将第一个字符转换为大写时出错

meteor - 4 级订阅嵌套在 meteor 中

javascript - 什么相当于 Storybook 中的 Meteor.startup