写OA,其中有个申请请假功能模块,用到日期选择器,初步方案是用到struts2自带的dojo中的 datetimerpicker控件:
<script type="text/javascript">
//截断字符串前后空格function trim(s){
return s.replace(/^\s*/,"").replace(/\s*$/,"");
}
function checkatt(){
//var start = trim(document.mailForm.elements['attendance.attStart'].value);
//var end = trim(document.mailForm.elements['attendance.attEnd'].value);
var start = dojo.widget.byId("starttime").getDate(); //这里本来是用上面的注释掉得方法获得日期值,但是在IE中出现了问题,导致如果日期为空的话验证报错,貌似是兼容性问题,在同学的代码中发现他是这么写的,改了后居然没事了,无论IE还是火狐都可以正常非空验证了。
var end = dojo.widget.byId("endtime").getDate();
var days = trim(document.mailForm.elements['attendance.attDays'].value);
var approve = trim(document.mailForm.elements['attendance.attApprove'].value);
var reason = trim(document.mailForm.elements['attendance.attReason'].value);
if(start==null||start==""){
alert("开始时间不能为空!");
return false;
}
if(end==null||end==""){
alert("结束时间不能为空!");
return false;
}else if(end<=start){
alert("结束日期必须在开始日期之后!");
return false;
}
if(days==null||days==""){alert("请假天数不能为空!");
return false;
}else if(isNaN(days)){
alert("天数只能是数字!");
return false;
}else if(days<=0||days>366){
alert("请假天数只能在1-366之间!");
return false;
}
if(approve==null||approve==""){
alert("请选择审批人!");
return false;
}
if((end-start)<0){
alert("结束日期不能再开始日期之前!")
return false;
}
if(reason.length>250){
alert("请假原因不能超过250个字符!")
return false;
}
return true;
}
function insDays(){
var start = dojo.widget.byId("starttime").getDate();
var end = dojo.widget.byId("endtime").getDate();
alert((end-start)/(1000*24*60*60));
}
</script>
<tr>
<td align="right" width="30%">
开始时间:
</td>
<td align="left">
<sx:datetimepicker name="attendance.attStart" id="starttime" displayFormat="yyyy-MM-dd" language="UTF-8"/>
<span style="color: red;font-size: 12px;" id="startSpan">*</span>
</td>
</tr>
<tr>
<td align="right" width="30%">
结束时间:
</td>
<td align="left">
<sx:datetimepicker name="attendance.attEnd" id="endtime" displayFormat="yyyy-MM-dd" language="UTF-8"/>
<span style="color: red;font-size: 12px;" id="endSpan">*</span>
</td>
</tr>
初步方案如此,只做记录只用。