实时验证自定义验证器

时间:2014-01-30 21:36:02

标签: javascript livevalidation

我正在关注此示例http://livevalidation.com/documentation#ValidateCustom,以检查两个字段是否都已填写。因此,如果第一个字段不为空,则第二个字段不能为空,反之亦然。

任何人都可以找出为什么这段代码不起作用?

var txtFirstName = new LiveValidation('txtTaco', {onlyOnSubmit: true } );
txtFirstName.add( 
    Validate.Custom( 1, { against: function(value,args){
        if(args.first||args.last){
            if(args.first&&args.last){
                return true;
            } else {
                return false;
            }
        }
   }, 
   args: {
      first:txtTaco.value,
      last:lastName.value} 
   }) //end custom
); // end add

http://jsfiddle.net/r5X6P/

1 个答案:

答案 0 :(得分:0)

你的问题和小提琴有几个问题:

  • 您在脚本部分中包含了this link,这是github页面,而不是代码。
  • 你不能热链接到github,为此你需要使用rawgithub.com
  • 此验证仅适用于第一个文本框,而不适用于第二个
  • 您将“1”作为值传递给“自定义”(未使用)
  • 您的代码不包含<form>,因此onlyOnSubmit永远不会触发
  • 您的<input>代码未关闭
  • 您不需要if (condition) { return true } else { return false },只需return (condition)
  • 您不需要将值作为args传递,只需在函数内部获取它们,它更干净并且也可以正常工作
  • 请勿使用txtTaco
  • 等晦涩的名称

使用解决方案我发现了一些与livevalidation有关的问题:

  • 您需要使用未记录的参数displayMessageWhenEmpty来验证字段为空时
  • 隐藏validMessage有一个错误。根据对源代码的评论,您需要将其设置为false以隐藏它,但这不起作用。所以我只是将它设置为空格。

我只做了一个验证器,作为姓氏。当您更改名字时,它会调用姓氏验证程序。缺点是,如果您设置无效字段的边框颜色样式,则只会更改姓氏。

这是最终的代码:

var valLastName = new LiveValidation('txtLastName', {validMessage: " "});

function validateFunction() {
    var first = txtFirstName.value;
    var last = txtLastName.value;
    if (first || last) // If either are present...
        return (first && last); // ...both must be present
    return true;
}

valLastName.add(Validate.Custom, {
    against: validateFunction, 
    failureMessage: "Please enter both first and last name", 
    displayMessageWhenEmpty: true
});

// Force validation of txtLastName
txtFirstName.onkeyup = function() {txtLastName.onkeyup()}; 

小提琴:http://jsfiddle.net/P7Cf3/