我刚刚开始涉足PL / SQL,所以这个问题可能非常简单。这是场景:
我有几个带有加权数值的复选框。例如:
复选框I - >价值' 5'
复选框II - >价值' 10'
复选框III - >价值' 15'
等
表单总共有15个复选框,最终用户可以选择0到15之间的任何位置。当他们选中复选框时,将计算总权重并显示最终数值。例如。检查3 Checkbox I& 2 Checkbox III将= 45分。
现在45的总值将等于一个单独的值。例如:
在0分,值='好的'
1-15分,值='错误'
16-30分,值='警告'
31+点,值='严重'
表单本身是在Oracle APEX中构建的,我可以使用动态操作来完成,但使用PL / SQL可能是更好的解决方案。
总之,我希望隐藏字段首先从选中的复选框中计算总数,然后使用该总计来计算出Okay,Error,Warning或Critical的值。
非常感谢任何帮助!
答案 0 :(得分:0)
根据我的经验,如果我们在您的案例中使用javascript会更好,因为我们必须操纵DOM和复选框的事件。如果你想在运行时显示/更改项目值并获取值,那么javascript比PLSQL更好,除非你想在每次检查/取消选中页面中不合适的方框时提交你的页面。 这是我的问题解决方案。
首先,在您的页面上创建一个Display Only
项。这就是值" Okay","错误","警告"或"严重"会出现。将其默认值设置为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;
}
上述函数将获得所检查的那些框的值的总和。如果未选中,则将从当前总和中取出一个框的值。它还会显示当前检查点的备注,无论是否为&#34; Okay&#34;,&#34;错误&#34;,&#34;警告&#34;或&#34;严重&#34 ;
在你的&#34;当页面加载时执行&#34;在页面的一部分,添加以下行:
getcheck(nameofyourcheckboxitem,nameofyourdisplayonlyitem);
其中nameofyourcheckboxitem
是复选框的名称,nameofyourdisplayonlyitem
是您刚刚创建的仅显示项目的名称。
以下是关于如何使用我给你的功能的示例行:
getcheck("P1_MYCHECKBOX","P1_MYDISPLAYONLY");