毕业后工作的第一个项目就是做一个泛微OA的流程。实际上不难但是还是在网上挺少记录这种的。记录一下给以后的自己和刚接触有需要的人吧,第一次写博客,有问题请指出。
实现的功能
1.多个check组成复选框必选至少一个
2.获取明细表的值传给主表
3.根据选择框显示和隐藏元素
4.对明细表的元素添加触发事件(不完善,这个页面响应太慢了导致没及时监听到,只能提交时做判断了,有看到的大佬指导一下)
5.按钮按了之后1s后才能继续点击
特殊的元素
页面按f12或者右键检查之后会发现页面有一堆隐藏的元素,第一次接触完全不知道0.0。
目前只用到了以下的:
#indexnum0:明细表索引,只有添加时才加,删除时值并不变。
#nodesnum0:明细表行数,添加删除都会变化。
#submitdtlid0: 存在的条目由num+“,”组成的字符串,例如value=“8,11,12”,由0开始记录
ps : 后面的0好像是第一张明细表,第二张应该就是1了
明细表的元素
第一个元素的id是_0,第二个是_1,以此类推,然后可以通过上面的隐藏元素来写js事件
下面就直接贴代码出来看吧。。。
<!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式。 -->
<script type = "text/javascript" >
var selectStr = $("#field27826").find("option:selected").val();//获取被选中的选项的值
if(selectStr = "个人申请"){
jQuery("#div0button").hide();
}
jQuery(document).ready(function() {
checkCustomize = function() {//提交前执行的函数
var nodesnum0 = jQuery("#nodesnum0").val();//行数
jQuery("#field28444").val(nodesnum0);//主表的值
//判断复选框是否有勾选
if ((jQuery("#field27782").attr("checked") == false) && (jQuery("#field27783").attr("checked") == false) && (
jQuery("#field27784").attr("checked") == false) &&
(jQuery("#field27785").attr("checked") == false) && (jQuery("#field27786").attr("checked") == false)) {
alert("请勾选参加理由至少一个复选框!");
return false;
} else {
if ((jQuery("#field27786").attr("checked") == true) && ($("#field27775").val() == null || $("#field27775").val() ==
"")) {
alert("请填写其他复选框文本内容");
return false;
}
if(parseInt(jQuery("#nodesnum0").val()) > 1){
var maxEatFee = jQuery("#field28385").val();//膳食费最大值
var maxHouseFee = jQuery("#field28383").val();//住宿费最大值
var submitStr = jQuery("#submitdtlid0").val();//submitdtlid0 value="8,11,12"
var strs = new Array(); //定义一数组
strs = submitStr.split(","); //字符分割
for (i = 1; i < strs.length - 1; i++) // 0 1 2
{
var strEatFee = jQuery("#field27798" + "_" + strs[i]).val();
var strHouseFee = jQuery("#field27799" + "_" + strs[i]).val();
if(parseFloat(strEatFee) > parseFloat(maxEatFee)) {
alert("根据公司差旅报销费用规定,膳杂费不可超过" + maxEatFee + "元,请更正数据");
return false;
}
if(parseFloat(strHouseFee) > parseFloat(maxHouseFee)) {
alert("根据公司差旅报销费用规定,住宿费不可超过" + maxHouseFee + "元,请更正数据");
return false;
}
}
}
return true;
}
};
//获取明细表数据传给主表
jQuery("#indexnum0").bindPropertyChange(function() {//获取申请人中最高的等级值
var index = jQuery("#indexnum0").val() - 1;
jQuery("#field27851" + "_" + index).bindPropertyChange(function() {
var userid = 0;
if ((jQuery("#field27851" + "_" + index).val()) > userid) {
userid = jQuery("#field27851" + "_" + index).val();
}
jQuery("#field27966").attr("value", userid);
})
});
//根据选择框显示和隐藏div
jQuery("#field27826").bindPropertyChange(function() {
var myselect = jQuery("#field27826").val();
if (myselect == 1) {
jQuery("#div0button").show();
} else {
jQuery("#div0button").hide();
}
});
//实际上点的快事件并来不及触发,太卡了,所以又写了提交时的判断(上面)
jQuery("#indexnum0").bindPropertyChange(function() {//行变化时就触发时间(貌似只有增加时,删除也要用#nodesnum0)
var index = jQuery("#indexnum0").val() - 1;
jQuery("#field27798" + "_" + index).bindPropertyChange(function() {
var maxFee = jQuery("#field28385").val();
var nowFee = jQuery("#field27798" + "_" + index).val();
if(parseInt(nowFee) == 0){
alert("请先填写前面的资料!");
}
if (parseFloat(nowFee) > parseFloat(maxFee)) {
alert("根据公司差旅报销费用规定,膳杂费不可超过" + maxFee + "元");
jQuery("#field27798" + "_" + index).val(parseInt(maxFee));
}
});
jQuery("#field27799" + "_" + index).bindPropertyChange(function() {
var maxFee = jQuery("#field28383").val();
var nowFee = jQuery("#field27799" + "_" + index).val();
if(parseInt(nowFee) == 0){
alert("请先填写前面的资料!");
}
if (parseFloat(nowFee) > parseFloat(maxFee)) {
alert("根据公司差旅报销费用规定,住宿费不可超过" + maxFee + "元");
jQuery("#field27799" + "_" + index).val(parseInt(maxFee));
}
});
});
//点击添加按钮后停止1s点击,然而在这里并没有卵用,就学习记录一下
jQuery("#nodesnum0").bindPropertyChange(function() {
$(".addbtn_p").attr("disabled", "disabled");//$addbutton0$这个id实测不能使用原因未知
setTimeout(function() {
$(".addbtn_p").removeAttr("disabled");
}, 1000);//1秒后才能点击
});
});
</script>
jQuery("#field27782").attr(“checked”) == false;这一块其实更推荐使用prop代替attr,因为后面另一个表单我用attr就不是true和false了,会出现undefined,百度找说是jquery版本问题,但是有两个版本jquery也太奇怪了。。
OA好像只是我们新人进来的第一个新手村任务,接下来就要做别的了,希望人没事。