javascript - jQuery 验证插件总是显示错误消息

标签 javascript jquery meteor jquery-plugins

我为数据库中的电子邮件检查创建自定义验证。

客户:

Template.Login.onRendered(() => {
  jQuery.validator.addMethod('checkEmailUnique', function(value, element) {
    Meteor.call('checkEmailUnique', value, function(err, result) {
      console.log('Email validator method response: ', result);
      return result;
    )};
  });

  $('.login-form').validate({
  rules: {
      emailAddress: {
        required: true,
        email: true,
        checkEmailUnique: true
      },
  messages: {
     checkEmailUnique: "email found"
      }
  });
});

服务器:

Meteor.methods({
  // Chech the email to unique
  checkEmailUnique:function(email){
     if(email && Meteor.isServer){
       let foundEmail = Meteor.users.findOne({'emails.address': email});
       if (foundEmail) {
         return false; // fails - display error
       } else {
         return true; // true - no message
       }
     }
  }
});

在浏览器控制台中我收到消息:

如果找到电子邮件 - false,如果未找到电子邮件 - true,但插件在这两种情况下都会显示我的验证消息“电子邮件已找到”。

我做错了什么?

更新。

因此,在第一个答案之后,我将代码更改为:

Template.Login.onRendered(() => {
  jQuery.validator.addMethod('checkEmailUnique', function(value, element) {
    return Meteor.wrapAsync(Meteor.call)('checkEmailUnique', value, element);
  });
});

在这两种情况下,我都会收到验证消息,表明电子邮件不是唯一的。

最佳答案

您的方法正在异步返回,因此返回值不会传递回验证器。您需要使用 Meteor.wrapAsync() 包装 Meteor.call() 才能同步使用它。

jQuery.validator.addMethod('checkEmailUnique', function(value, element) {
  return Meteor.wrapAsync(Meteor.call)('checkEmailUnique', value);
});

如果您认为 Meteor.call() 可能会出错,则需要 try-catch block ,因为 Meteor.wrapAsync() 返回结果而不是错误:

jQuery.validator.addMethod('checkEmailUnique', function(value, element) {
  try {
    return Meteor.wrapAsync(Meteor.call)('checkEmailUnique', value);
  } catch(e) {
    console.log(e); // handle the error as required
  }
});

关于javascript - jQuery 验证插件总是显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308369/

相关文章:

php - 将选项传递给 jquery 文件的正确方法是什么?

javascript - 带变量的跨浏览器 CSS3 转换 jQuery 函数

javascript - Meteor 实现 Google map 和 Google 地方信息

meteor - 如何在 Meteor.js 应用程序中获取服务器端的 http 请求 header 字段?

php - 如何在网站之间传输javascript数据?

javascript - meteor js 和全日历

javascript - 遵守 WCAG 2.0 AA 是否会阻止使用 JavaScript?

javascript - 如何将对象数组转换为具有相同值但具有修改键的对象数组?

javascript - 切换与单击的 ID 相同的 div

javascript - 在 window.Unload 事件上将用户事件发布到服务器是个好主意吗?