Cognos 文本框提示的多重检查

Multicheck of Cognos textbox prompts

我有两个文本框提示,我需要对其进行验证以仅接受数字或空字段,如果您输入除数字或空字段以外的任何内容,则应禁用 运行 按钮。

oCR = cognos.Report.getReport('_THIS_');
var prompts;
var f1 = oCR.prompt.getControlByName('Prompt1');
var f2 = oCR.prompt.getControlByName('Prompt2');
prompts = [f1,f2];

    for (var i=0; i < prompts.length; i++) {
      prompts[i].setValidator(validate);
    }

function validate() {
var result = false;
for (var i=0; i < prompts.length; i++) {
  var x = prompts[i].getValues();
  if(x.length == 0) { result = true;}
  if(x.length == 1 && x['use'] == " ") {result = true};
  if(x.length > 0) {
   var sValue = x['use'];
   var codeFormat = new RegExp("^\d+$")
   if(codeFormat.test(sValue)) {
     result=true;
   } 
  }
}

if(result == true) {
  getLink("Runreport").css("background-color", "#005FA5").css("border-color", "#005FA5").css("pointer-events","auto");
} else {
  getLink("Runreport").css("background-color", "#dddddd").css("border-color", "#cccccc").css("pointer-events","none");
    }
return result;
}

这并不是我想要的方式。因为现在它会检查两个提示是否都为真。但是,如果一个提示为真而另一个为假,则它应该是假的而不是真。有人知道如何解决这个问题吗?

这里是您的验证函数,它经过了一些简化和重组:

function validate(values) {
    var result = true,currentresult = true,x;
    if (values.length > 0) {
        if (isNaN(values[0].use)) {
            currentresult = false;
        }
    }
    for (var i=0; i < prompts.length; i++) {
        x = prompts[i].getValue();
        if (x.length > 0) {
            if (isNaN(x)) {
                result = false;
                break;
            }
        }
        if (prompts[i] != this) {
            prompts[i].checkData();
        }
    }
    if (result) {
        getLink("Runreport").css("background-color", "#005FA5").css("border-color", "#005FA5").css("pointer-events","auto");
    } else {
        getLink("Runreport").css("background-color", "#dddddd").css("border-color", "#cccccc").css("pointer-events","none");
    }
    return currentresult;
}

由于您希望两个提示中的任何一个失败都导致失效,我们首先将结果设置为 true。然后我们寻找提示无效的特殊情况。当提示的长度不为 0(外部 if)并且提示的内容不是数字(内部 if)时,会出现这种特殊情况。我使用了 isNaN() 函数,因为如果传入的值不是数字,它将 return 为真,如果值为数字,则为假。如果 isNan() return 为真,那么我们将结果设置为假并跳出 for 循环。结果是,如果任何提示 return 为假,则整个结果将为假。

要获得文本提示验证的更多乐趣,请查看我的高级技术 Cognos Prompt Numeric Range Validation which demonstrates some other ways to do multi-prompt validation and Multi-prompt Validation,其中展示了如何将多个提示作为一个组进行验证。