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,其中展示了如何将多个提示作为一个组进行验证。
我有两个文本框提示,我需要对其进行验证以仅接受数字或空字段,如果您输入除数字或空字段以外的任何内容,则应禁用 运行 按钮。
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,其中展示了如何将多个提示作为一个组进行验证。