要求:前台添加页面的明细行中,有列下拉框选择分类和一列付款金额的输入框,明细行上面有两个输入框,要求在明细行选择的分类和付款金额中筛选付款金额之和第一高的的分类和金额、第二高的分类和金额自动复制到上面的两个输入框中;
思路:循环明细表,把所有的明细表的分类和付款金额放到json数组中,然后循环json数组把分类重复的付款金额相加并合并,然后根据付款金额从高到底排序,那么付款金额最高和第二高的分类信息也就能在json数组中获取绑定到上面的文本框了;
此代码的实现在bpm平台上实现有所不同:(效果图如下)
代码分享:
//获取明细所有分类的最大付款额和分类名称(相同分类的要加起来)
function leibiezonge(){
var list='';
var detaillist=$('[id=XDropDownList3]');
var valuelist=[];
var newlist=[];
var map={};
//循环明细表
for(var i=0;i<detaillist.length;i++){
//获取分类名称
var newid = $(detaillist[i]).find(".yz-xform-field-ele")[0].value;
//获取分类之后的付款金额
var newvalue=$(detaillist[i]).parent("div").parent("td").parent("tr").children("td").eq(7).children("#XTextBox14").find(".yz-xform-field-ele")[0].value;
//全部放进数组中
valuelist.push({
leibie: newid,
jine: newvalue
});
}
//这是如果有重复的分类就合并分类并付款金额相加
if(valuelist!=undefined){
for(var i=0;i<valuelist.length;i++){
var ai=valuelist[i];
if(!map[ai.leibie]){
newlist.push({
leibie: ai.leibie,
jine: ai.jine
});
map[ai.leibie] = ai;
}else{
for(var j=0;j<newlist.length;j++){
var ji=newlist[j];
if(ji.leibie==ai.leibie){
ji.jine=parseInt(ai.jine==''?"0":ai.jine)+parseInt(ji.jine==''?"0":ji.jine);
break;
}
}
}
}
}
//这是根据付款金额从高到低的排序
function getSortFun(order, sortBy) {
var ordAlpah = (order == 'asc') ?'>' : '<';
var sortFun = new Function('a', 'b', 'return a.'+ sortBy + ordAlpah + 'b.'+ sortBy + '?1:-1');
return sortFun;
}
newlist.sort(getSortFun('desc','jine'));
var attrfenlei=newlist[0].leibie;
var attrjine=newlist[0].jine==''?"0":newlist[0].jine;
//为所需要的文本框赋值
$("#XTextBox4").find(".yz-xform-field-ele").attr('value', attrjine);
$("#XLabel3").find(".yz-xform-field-ele").html(attrfenlei);
if(newlist[1]!=undefined){
$("#XTextBox5").find(".yz-xform-field-ele").attr('value', newlist[1].jine==''?"0":newlist[1].jine);
$("#XLabel4").find(".yz-xform-field-ele").html(newlist[1].leibie);
}
//return newlist[0].leibie+(newlist[0].jine==''?"0":newlist[0].jine);
}