2012-10-08 61 views
3

我有一个字段,可以包含电子邮件或移动(在我的情况下,手机是8位数字)。 我已经尝试了两种方法(两个示例都不起作用,因为'元素'没有验证方法):jQuery验证 - 如何验证一个字段与两个异或规则

第一种方法:创建自定义方法并在那里执行两个验证,但是接下来我必须创建自己的电子邮件和移动验证 - 我找不到如何在新方法中重用jQuery验证规则的方法。这是我想要的:

jQuery.validator.addMethod("mobileoremail", function(value, element) { 
     return this.optional(element) || 
       element.validate({ rules: { digits: true, rangelength: [8, 8] } }) || 
       element.validate({ rules: { email: true } }); 
    }, "Invalid mobile or email"); 

第二种方法:创建依赖规则。而且在这种情况下,我找不到如何重用jQuery验证规则的方法。

{ myRules: { 
      rules: { 
       user: { 
        required: true, 
        email: { 
         depends: function(element) { 
          return !element.validate({ rules: { mobile: true } }); 
         } 
        }, 
        mobile: { 
         depends: function (element) { 
          return !element.validate({ rules: { email: true } }); 
         } 
        } 
       } 
      } 
     } 
    } 

回答

5

如何以下验证方法...

$.validator.addMethod("xor", function(val, el, param) { 
    var valid = false; 

    // loop through sets of nested rules 
    for(var i = 0; i < param.length; ++i) { 
     var setResult = true; 

     // loop through nested rules in the set 
     for(var x in param[i]) { 
      var result = $.validator.methods[x].call(this, val, el, param[i][x]); 

      // If the input breaks one rule in a set we stop and move 
      // to the next set... 
      if(!result) { 
       setResult = false; 
       break; 
      } 
     } 

     // If the value passes for one set we stop with a true result 
     if(setResult == true) { 
      valid = true; 
      break; 
     } 
    } 

    // Return the validation result 
    return this.optional(el) || valid; 
}, "The value entered is invalid"); 

然后,我们可以设置表单验证如下...

$("form").validate({ 
    rules: { 
    input: { 
     xor: [{ 
     digits: true, 
     rangelength: [8, 8] 
     }, { 
     email: true 
     }] 
    } 
    }, 
    messages: { 
    input: { 
     xor: "Please enter a valid email or phone number" 
    } 
    } 
});  

看到它在行动这里http://jsfiddle.net/eJdBa/

+0

太棒了!优雅的解决方 – marisks

+0

谢谢,它有一个有趣的验证问题 –

+0

我收到以下错误:TypeError:$ .validator.methods [method] is undefined。你有什么线索为什么? 无论如何,很好的解决方案! – Thrasher

相关问题