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/

4

1 回答 1

0

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

  • 将此链接包含在脚本部分中,这是 github 页面,而不是代码。
  • 您不能热链接到 github,为此您需要使用 rawgithub.com
  • 此验证仅适用于第一个文本框,而不适用于第二个文本框
  • 您将“1”作为值传递给未使用的自定义
  • 您的代码不包含 a <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/

于 2014-01-30T23:22:56.113 回答