2014-01-30 62 views
0

我跟着这个例子,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/

+0

如果您正在测试这个完全属于的jsfiddle,我注意到,Chrome的努力包括'livevalidation_standalone.js'时抛出一个错误。特别是:'拒绝执行'https://github.com/alechill/livevalidation/blob/master/src/livevalidation_standalone.js'脚本,因为它的MIME类型('text/html')不可执行,严格的MIME类型检查已启用。 '。验证是否在本地服务器上工作? –

回答

0

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

  • 您在脚本中包含部分,它是GitHub的网页,而不是代码this link
  • 不能热链接github上,要做到这一点,你需要使用rawgithub.com
  • 这种验证是在第一个文本框,而不是第二
  • 你逝去的“1”值只工作自定义,这是不被使用
  • 您的代码不包括<form>,所以onlyOnSubmit永远不会触发
  • <input>标签没有被关闭
  • 你并不需要if (condition) { return true } else { return false },只是return (condition)
  • 你并不需要通过值作为指定参数时,只需获得这些功能里面,它的清洁和作品一样好
  • 不要使用晦涩的名字,如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/