相信大家做WEB开发,一定有自己的日历选择控件:
例如可以选择出格式为:yyyy-MM-dd的日期
如果要手输日期、时间怎么办?为了尽可能提高用户体验,我们需要低调且自动校验能力比较强的输入框。
于是自己决定写一个:但是由于对JS不是很熟悉,愿和CSDN上的朋友上讨论下,如何改善如下日期输入框。
代码如下:<script language="javascript">
/*
** field 控件名称 检验格式(yyyy-MM-dd)
*/
function checkDate(field,format){
var format=format;
var patm=/^[0-9\-]{1,10}$/;
var del=/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}$/;if(field.value.length<1)
return false;
else{
if(field.value != "" && !patm.exec(field.value)){
field.value=field.value.slice(0,-1);
}
if(field.value.length == 4){
field.value=field.value+"-";
}
if(field.value.length == 7&&!del.exec(field.value)){
field.value=field.value+"-";
}
if(field.value.length > 10){
field.value=field.value.slice(0,-1);
}
}
}
</script>
<input type="text" id="test" name="test" style="width:130px" maxlength="255" onkeyup ="checkDate(test,'yyyy-MM-dd')" />
上面这个日期输入框的缺陷就是当用户输入完毕后,如果再通过鼠标复制日期中的某几位进行修改,就会出现问题,敢问各位JS大牛有什么比较好的办法解决呢?
例如可以选择出格式为:yyyy-MM-dd的日期
如果要手输日期、时间怎么办?为了尽可能提高用户体验,我们需要低调且自动校验能力比较强的输入框。
于是自己决定写一个:但是由于对JS不是很熟悉,愿和CSDN上的朋友上讨论下,如何改善如下日期输入框。
代码如下:<script language="javascript">
/*
** field 控件名称 检验格式(yyyy-MM-dd)
*/
function checkDate(field,format){
var format=format;
var patm=/^[0-9\-]{1,10}$/;
var del=/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}$/;if(field.value.length<1)
return false;
else{
if(field.value != "" && !patm.exec(field.value)){
field.value=field.value.slice(0,-1);
}
if(field.value.length == 4){
field.value=field.value+"-";
}
if(field.value.length == 7&&!del.exec(field.value)){
field.value=field.value+"-";
}
if(field.value.length > 10){
field.value=field.value.slice(0,-1);
}
}
}
</script>
<input type="text" id="test" name="test" style="width:130px" maxlength="255" onkeyup ="checkDate(test,'yyyy-MM-dd')" />
上面这个日期输入框的缺陷就是当用户输入完毕后,如果再通过鼠标复制日期中的某几位进行修改,就会出现问题,敢问各位JS大牛有什么比较好的办法解决呢?
function checkDate(field){
var v = field.value;
v = v.replace(/[^\d]/g,"");
v = v.substring(0,Math.min(v.length,8));
if(v.length>=6){
v = v.substring(0,4)+"-"+v.substring(4,6)+"-"+v.substring(6);
}else if(v.length>=4){
v = v.substring(0,4)+"-"+v.substring(4);
}
field.value = v;
}