Cognos文本框的多重检查会提示

时间:2018-05-02 12:48:27

标签: javascript cognos

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

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;
}

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

1 个答案:

答案 0 :(得分:1)

这是您的验证功能简化并重新构建了一点:

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()函数,因为如果传入的值不是数字,它将返回true,如果值是数字,则返回false。如果isNan()返回true,那么我们将结果设置为false并跳出for循环。结果是,如果任何提示返回false,则整个结果将为false。

有关文本提示验证的更多乐趣,请查看我的高级技巧Cognos Prompt Numeric Range Validation,其中演示了进行多提示验证的其他方法,以及Multi-prompt Validation,其中显示了如何将多个提示作为一组进行验证。