根据我的经验,如果我们要在您的情况下使用 javascript 会更好,因为我们必须操作 DOM 和复选框的事件。如果您想在运行时显示/更改项目值并获取值,那么 javascript 在这方面比 PLSQL 更好,除非您每次选中/取消选中页面中不建议的框时都想提交页面。
这是我对您的问题的解决方案。
首先,在您的页面上创建一个Display Only 项目。这是值“Okay”、“Error”、“Warning”或“Critical”出现的地方。将其默认值设置为 0 非常重要。然后在页面的“函数和全局声明”部分中,放置以下函数:
function getcheck(checkbox_id,displayOnly_id){
var chkboxName = document.getElementById(checkbox_id + "_0").getAttribute("name");
var chks = document.getElementsByName(chkboxName);
var howmanychecks = chks.length;
var currentSum=0;
var v_remarks = "";
for(x=0;x<howmanychecks;x++){
chks[x].setAttribute("onchange","checkIfchecked(this,\'" + displayOnly_id + "\')");
if(chks[x].checked){
currentSum = currentSum + Number(chks[x].value);
}
}
if(currentSum==0){
v_remarks = "Okay";
}
else if(currentSum>0 && currentSum<=15){
v_remarks = "Error";
}
else if(currentSum>15 && currentSum<=30){
v_remarks = "Warning";
}
else{
v_remarks = "Critical";
}
document.getElementById(displayOnly_id).value = currentSum;
document.getElementById(displayOnly_id + "_DISPLAY").innerHTML = currentSum + ": " + v_remarks;
}
function checkIfchecked(p_element, displayOnly_id){
var v_difference;
var v_sum = Number($v(displayOnly_id));
var displayOnly_display = displayOnly_id + "_DISPLAY";
var v_remarks = "";
if(p_element.checked){
v_sum = v_sum + Number(p_element.value);
$("#" + displayOnly_id).val(v_sum);
}
else{
v_difference=Number($("#" + displayOnly_id).val())-Number(p_element.value);
if(v_difference<0){
v_difference=0;
}
$("#" + displayOnly_id).val(v_difference);
}
if($("#" + displayOnly_id).val()==0){
v_remarks = "Okay";
}
else if($("#" + displayOnly_id).val()>0 && $("#" + displayOnly_id).val()<=15){
v_remarks = "Error";
}
else if($("#" + displayOnly_id).val()>15 && $("#" + displayOnly_id).val()<=30){
v_remarks = "Warning";
}
else{
v_remarks = "Critical";
}
document.getElementById(displayOnly_display).innerHTML=$("#" + displayOnly_id).val() + ": " + v_remarks;
}
上述函数将获得被选中的那些框的值的总和。如果未选中,则将从当前总和中取出一个框的值。它还会显示当前检查点的备注,无论是“Okay”、“Error”、“Warning”还是“Critical”。
在页面的“页面加载时执行”部分,添加以下行:
getcheck(nameofyourcheckboxitem,nameofyourdisplayonlyitem);
其中nameofyourcheckboxitem 是您的复选框的名称,nameofyourdisplayonlyitem 是您刚刚创建的仅显示项目的名称。
下面是我给你的函数的使用示例:
getcheck("P1_MYCHECKBOX","P1_MYDISPLAYONLY");