首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

document.createElement("input")怎么定义日期格式

2013-01-19 
document.createElement(input)如何定义日期格式?各位大侠,请问如何document.createElement(input)动

document.createElement("input")如何定义日期格式?
各位大侠,请问如何document.createElement("input")动态定义单元格,点击时下拉日历,让用户用户用选择的方式输入日期,而不是手动输入日期,即方便,又不会出错!
多谢!
[解决办法]
input 点击不会出现日期的,可以直接把日期控件放到单元格里面,
[解决办法]
My97DatePicker控件
[解决办法]
WdatePicker
[解决办法]
要看你日期控件是怎么触发的,如dwz框架的日期控件,只要定义个class="date"就可以了
<input type="text" class="date"/>
[解决办法]
给你的input设置属性:
input.setAttribute("type","text");
input.setAttribute("onclick","fPopCalendar(this)");
input.setAttribute("onFocus","fPopCalendar(this)");

然后引入js代码:
/**
 * 使用时在控件内加入如下代码;
 * onclick="fPopCalendar(this)" onFocus="fPopCalendar(this)"
*/
//设置日期显示格式,使月和日期显示双位
//如将2008-4-5转化成:2008-04-05 alert
function padout(number) {
    return (number < 10) ? '0' + number : number; 
}

var gdCtrl = new Object();                                          // 输入对象
var goSelectTag = new Array();
var gcGray = "#aaaaaa";                                             // 非本月日期的背景显示颜色
var gcToggle = "#33ccFF";                                           // 鼠标移动到日期格时,背景的变换颜色
var gcBG = "#00AAFF";                                               // 默认的日期格背景颜色

var gdCurDate = new Date();                                         // 得到当前日期时间
var giYear = gdCurDate.getFullYear();                               // 得到当前年,实际年
var giMonth = gdCurDate.getMonth()+1;                               // 得到当前月,实际月
var giDay = gdCurDate.getDate();                                    // 得到当前日,实际日
var thisYear = giYear;
var thisMonth = giMonth;
var thisDay = giDay;



// 得到当前日期输出控件中日期的年或月的值
// type=0,返回年(4位的公元)
// type=1,返回月
function getYearMon(type) {
    var dateItem;
    var theDate;
    theDate=gdCtrl.value;
    if(theDate == null 
[解决办法]
 theDate=="") return null;
    theDate=theDate.replace(/ /g,"-");                              // 使用正则表达式,用-替换所有空格,/g标识全局替换
    theDate=theDate.replace(/\./g,"-");                             // 使用正则表达式,用-替换所有.
    theDate=theDate.replace(/\//g,"-");                             // 使用正则表达式,用-替换所有/
    theDate=theDate.replace(/\\/g,"-");                             // 使用正则表达式,用-替换所有\
    dateItem=theDate.split("-"); 
    if (dateItem.length<1)                                          // 没有任何日期,无效返回
        return null;
    if (dateItem.length<2)                                          // 只有一部分日期信息,把月信息置为0
        dateItem[1]=0;
    if (dateItem.length<3)                                          // 只有两部分日期信息,把年信息置为0
        dateItem[2]=0;

    // 判断事是否为数字,如果不是数字,操作后值为NaN
    dateItem[0]++;dateItem[0]--;
    dateItem[1]++;dateItem[1]--;
    dateItem[2]++;dateItem[2]--;
    if(type == 0){
    if (isNaN(dateItem[0])){
        alert("年输入错误");
        return null;
    }
    }else if(type == 1 ){
    if (isNaN(dateItem[1])){
        alert("月输入错误");
        return null;
    }
    }
    if(type == 0 ){
     if (isNaN(dateItem[2])){
        alert("日输入错误");
        return null;
    }
    }
   


    // 判断年的有效性,范围是1900--2050。这部分处理,有局限;需要修改。
    if ((Number(dateItem[0])>=0)&&(Number(dateItem[0])<50))
        dateItem[0]+=2000;
    if ((Number(dateItem[0])>=50)&&(Number(dateItem[0])<100))
        dateItem[0]+=1900;
    
    /*if ((Number(dateItem[0])<1900)
[解决办法]
(Number(dateItem[0])>2050)){
        alert("年输入超出范围")
        return null;
    }

    // 判断月的有效性
    if ((Number(dateItem[1])<1)
[解决办法]
(Number(dateItem[1])>12)){
        alert("月输入超出范围");
        //alert(dateItem[1]);
        return null;
    }*/
    if(type == 0){
        if ((Number(dateItem[0])<1900)
[解决办法]
(Number(dateItem[0])>2050)){
            alert("年输入超出范围")
            return null;
        }
    }else if(type == 1) {
        if ((Number(dateItem[1])<1)
[解决办法]
(Number(dateItem[1])>12)){
            alert("月输入超出范围");
            return null;
        }
    }
    // 为什么没有校验日的有效性???
    return dateItem[type];
}

// 弹出日历选择器
// dateCtrl=输出控件
function fPopCalendar( dateCtrl){
    event.cancelBubble=true;                                        // 取消升腾事件现象
    gdCtrl = dateCtrl;
    var inputYear = getYearMon(0);            
    if(inputYear != null) giYear = inputYear;                       // 条件年;如果日期控件中有年的值,则取其年;否则取当前年
    var inputMonth = getYearMon(1);                                 // 得到输出控件中,月值
    if(inputMonth != null) giMonth = inputMonth;                    // 条件月;如果日期控件中有月的值,则取其月;否则取当前月
    fSetYearMon(giYear, giMonth);                                   // 设置默认显示日期格


    var point = getIE(dateCtrl);                                    // 得到显示日期格的坐标位置,(当前为输出控件的下方)
    with (VicPopCal.style) {                                        // 设置显示日期格层的样式
        left = point.x;
        top  = point.y;
        width = VicPopCal.offsetWidth;
        height = VicPopCal.offsetHeight;
        fToggleTags(point);                                         // SELECT控件出界处理
        visibility = 'visible';                                     // 显示日期格
        // 挡住select 下拉框
var IFR = document.getElementById('myIfr');
IFR.left=point.x;
IFR.top=point.y;
    }
    VicPopCal.focus();                                              // 日期格得到焦点
}

//日期选择框在控件上方
function fPopCalendar_2( dateCtrl){
    event.cancelBubble=true;                                        // 取消升腾事件现象
    gdCtrl = dateCtrl;
    var inputYear = getYearMon(0);            
    if(inputYear != null) giYear = inputYear;                       // 条件年;如果日期控件中有年的值,则取其年;否则取当前年
    var inputMonth = getYearMon(1);                                 // 得到输出控件中,月值
    if(inputMonth != null) giMonth = inputMonth;                    // 条件月;如果日期控件中有月的值,则取其月;否则取当前月
    fSetYearMon(giYear, giMonth);                                   // 设置默认显示日期格
    var point = getIE_2(dateCtrl);                                    // 得到显示日期格的坐标位置,(当前为输出控件的下方)


    with (VicPopCal.style) {                                        // 设置显示日期格层的样式
        left = point.x;
        top  = point.y;
        width = VicPopCal.offsetWidth;
        height = VicPopCal.offsetHeight;
        fToggleTags(point);                                         // SELECT控件出界处理
        visibility = 'visible';                                     // 显示日期格
        // 挡住select 下拉框
var IFR = document.getElementById('myIfr');
IFR.left=point.x;
IFR.top=point.y;
    }
    VicPopCal.focus();                                              // 日期格得到焦点
}

// 得到激活控件所在的位置
// aTag为输出控件对象的形参
function getIE(e){
    var t=e.offsetTop;
    var l=e.offsetLeft;
    var h=e.offsetHeight;
    while(e=e.offsetParent){
        t+=e.offsetTop;
        l+=e.offsetLeft;
    }
    var pt = new Point(l,t+h);                                        // 初始化坐标位置,为窗口左上角
    return pt;
}

//得到激活控件所在的位置,使得日期选择框在控件上方
function getIE_2(e){
    var t=e.offsetTop;
    var l=e.offsetLeft;
    var h=e.offsetHeight;
    while(e=e.offsetParent){
        t+=e.offsetTop;
        l+=e.offsetLeft;
    }
    var pt = new Point(l,t-VicPopCal.offsetHeight);                                        // 初始化坐标位置,为窗口左上角
    return pt;
}

// 设置选择的日期
function fSetDate(iYear, iMonth, iDay){
    gdCtrl.value = iYear+"-"+padout(iMonth)+"-"+padout(iDay);       // Here, you could modify the locale as you need !!!!
    fHideCalendar();                                                // 隐藏日历


}

// 隐藏日历
function fHideCalendar(){
    VicPopCal.style.visibility = "hidden";
    for (i in goSelectTag)
        goSelectTag[i].style.visibility = "visible";
    goSelectTag.length = 0;
}

// 点击日期格时
// aCell=当前日期格对象
function fSetSelected(aCell){
    var iOffset = 0;
    var iYear = parseInt(tbSelYear.value);
    var iMonth = parseInt(tbSelMonth.value);
    aCell.bgColor = gcBG;
    with (aCell.children["cellText"]){
        var iDay = parseInt(innerText);
        if (color==gcGray)                                          // 非当月日期;1=下月,-1=上月
            iOffset = (Victor<10)?-1:1;
        iMonth += iOffset;
        if (iMonth<1) {                                             // 上一年
            iYear--;
            iMonth = 12;
        }else if (iMonth>12){                                       // 下一年
            iYear++;
            iMonth = 1;
        }
    }
    fSetDate(iYear, iMonth, iDay);
}

// 初始化坐标对象
function Point(iX, iY){
    this.x = iX;
    this.y = iY;
}

// 建立当前日期格的值
function fBuildCal(iYear, iMonth) {
    var aMonth=new Array();
    for(i=1;i<7;i++)
        aMonth[i]=new Array(i);
    var dCalDate=new Date(iYear, iMonth-1, 1);
    var iDayOfFirst=dCalDate.getDay();                              // 得到当月第一天的星期值
    var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();          // 得到当前月的天数
    var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1; // 得到上月最后一个星期天所在的日期
    var iDate = 1;
    var iNext = 1;
    for (d = 0; d < 7; d++)                                         // 处理第一行的日期显示值


        aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;    // 如果本星期值小于当月第一天的星期值,记录上月最后一个星期天的日期值+当前星期值
    for (w = 2; w < 7; w++)                                         // 处理第二行到第六行的日期显示值
        for (d = 0; d < 7; d++)
            aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);// 如果当前星期值在当月日期中,显示当月日期,否则显示下个月的日期
    return aMonth;
}


[解决办法]
接楼上的js代码,楼主把这部分代码跟上面的代码合并放在一起。
// 画日历显示格
function fDrawCal(iYear, iMonth, iCellHeight, iDateTextSize) {
    var WeekDay = new Array("日","一","二","三","四","五","六");
    var styleTD = " bgcolor='#ffcc00' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font:bold"+iDateTextSize+" 宋体;";            //Coded by Liming Weng(Victor Won) email:victorwon@netease.com
    with (document) {
        write("    <tr>");
        for(i=0; i<7; i++)
            write("    <td "+styleTD+"color:#333333' style='font: 9pt'>" + WeekDay[i] + "</td>");
        write("    </tr>");
        for (w = 1; w < 7; w++) {
            write("<tr>");
            for (d = 0; d < 7; d++) {
                write("<td style='font: 9pt' bgcolor='#00aaff' id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG'onclick='fSetSelected(this)'>");
                write("    <font id=cellText Victor='Liming Weng'> </font>");
                write("</td>")
            }
            write("</tr>");
        }
    }
}

// 动态修改当前日期格的值
function fUpdateCal(iYear, iMonth) {
    myMonth = fBuildCal(iYear, iMonth);                             // 建立日期表格中的日期显示值
    var i = 0;
    for (w = 0; w < 6; w++)                                         // 从第一行到第6行开始处理日期显示


        for (d = 0; d < 7; d++)                                     // 从第一列到第7列开始画日期格
        with (cellText[(7*w)+d]) {                                  // 定位日期格的坐标
            Victor = i++;                                           // 处理顺序号
            if (myMonth[w+1][d]<0) {                                // 非当月
                color = gcGray;                                     // 非当月日期显示为深灰色
                innerText = -myMonth[w+1][d];                       // 把标志为负值的非但前月的日期显示为正值
            }else{                                                  // 当月
                color = ((d==0)
[解决办法]
(d==6))?"#ffdd99":"white";         // 六、日的颜色为浅灰色,星期一到五为白色
                innerText = myMonth[w+1][d];
            }
        }
}

// 设置年下拉列表和月下拉列表的值
function fSetYearMon(iYear, iMon){
    tbSelMonth.options[iMon-1].selected = true;                     // 设置月下拉列表中的月,为条件月
    for (i = 0; i < tbSelYear.length; i++)
        if (tbSelYear.options[i].value == iYear)
            tbSelYear.options[i].selected = true;                   // 设置年下拉列表中的年,为条件年
    fUpdateCal(iYear, iMon);
}

// 点击上月按钮
function fPrevMonth(){
    var iMon = tbSelMonth.value;
    var iYear = tbSelYear.value;


    if (--iMon<1) {
        iMon = 12;
        iYear--;
    }
    fSetYearMon(iYear, iMon);
}

// 点击下月按钮
function fNextMonth(){
    var iMon = tbSelMonth.value;
    var iYear = tbSelYear.value;
    if (++iMon>12) {
        iMon = 1;
        iYear++;
    }
    fSetYearMon(iYear, iMon);
}

// SELECT 控件出界处理
function fToggleTags(){
/*
    with (document.all.tags("SELECT")){                             // 所有SELECT控件
        for (i=0; i<length; i++)
            if ((item(i).Victor!="Won")&&fTagInBound(item(i))){
                //item(i).style.visibility = "";      
                goSelectTag[goSelectTag.length] = item(i);
            }
    }*/
}

// 显示的选择控件超出了界限
function fTagInBound(aTag){
    with (VicPopCal.style){
        var l = parseInt(left);
        var t = parseInt(top);
        var r = l+parseInt(width);
        var b = t+parseInt(height);
        var ptLT = getIE(aTag);
        return !((ptLT.x>r)
[解决办法]
(ptLT.x+aTag.offsetWidth<l)
[解决办法]
(ptLT.y>b)
[解决办法]
(ptLT.y+aTag.offsetHeight<t));
    }
}

// 得到激活控件所在的位置
// aTag为输出控件对象的形参
function fGetXY(aTag){
    var oTmp = aTag;
    var pt = new Point(0,0);                                        // 初始化坐标位置,为窗口左上角
    do {
        pt.x=oTmp.offsetLeft                                        // 当前输出控件的left位置
        pt.y=oTmp.offsetTop+oTmp.offsetHeight                       // 当前输出控件的底部位置
        oTmp = oTmp.offsetParent;                                   // 得到当前对象的容器对象的引用



    } while(oTmp.tagName!="BODY");                                  // tagName指对象的标签名称
    return pt;
}

var gMonths = new Array("&nbsp;一月","&nbsp;二月","&nbsp;三月","&nbsp;四月","&nbsp;五月","&nbsp;六月","&nbsp;七月","&nbsp;八月","&nbsp;九月","&nbsp;十月","十一月","十二月");
with (document) {
    write("<Div id='VicPopCal' onclick='event.cancelBubble=true' style='POSITION:absolute;visibility:hidden;border:1px ridge;width:10;z-index:100;'>");
    write("<table id="VicPopTable" border='1' cellspacing='1' cellpadding='0'  bgcolor='#def3ff'>");
    write("    <TR>");
    write("        <td valign='middle' align='center'>");
    write("            <input type='button' name='PrevMonth' value='<' onClick='fPrevMonth()' class='go' style='font: 8pt'>&nbsp;");
    write("            <SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' style='font: 9pt; BACKGROUND-COLOR: #f4f4ff;'>");
    for(i=1900;i<2050;i++)
        write("            <OPTION value='"+i+"'>"+i+"年</OPTION>");
    write("            </SELECT>&nbsp;");
    write("            <SELECT name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' style='font:9pt;BACKGROUND-COLOR:#f4f4ff;BORDER-BOTTOM:#666666 1px solid;BORDER-LEFT:#666666 1px solid;BORDER-RIGHT:#666666 1px solid;BORDER-TOP:#666666 1px solid'>");
    for (i=0; i<12; i++)
        write("            <OPTION value='"+(i+1)+"'>"+gMonths[i]+"</option>");
    write("            </SELECT>&nbsp;");
    write("            <input type='button' name='PrevMonth' value='>' onclick='fNextMonth()' class='go' style='font: 8pt'>");
    write("    </td>");
    write("    </TR>");
    write("    <TR>");
    write("        <td align='center'>");
    write("            <DIV style='background-color:#000000'><table width='100%' border='0'  cellspacing='1' cellpadding='0'>");
    fDrawCal(giYear, giMonth, 12, 12);
    write("            </table>");
write("</DIV>");
    write("        </td>");


    write("    </TR>");
    write("    <TR>");
    write("         <TD align='center'>");
    write("             <B style='cursor:hand;font:9pt 宋体' onclick='fSetDate(thisYear,thisMonth,thisDay)' onMouseOver='this.style.color=gcToggle'onMouseOut='this.style.color=0'>今天:"+thisYear+"年"+thisMonth+"月"+thisDay+"日</B>");
    write("         </TD>");
    write("    </TR>");
    write("</TABLE>");
write("<iframe id="myIfr" marginwidth="0" marginheight="0" frameborder="0" src="javascript:false" style="position:absolute; visibility:"
           +"visiable; top:0px; left:0px; width:220px; height:157px; z-index:-1; filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';"></iframe>");
    write("</Div>");
    write("<SCRIPT event=onclick() for=document>fHideCalendar()<\/SCRIPT>");
}

热点排行