<input type=text name=ddd maxlength=10 size=10
 onkeyup=cc(this) onfacos=ff() onpaste="return false;"><script language=Javascript>
function ff() //控制光标位置
{
  var e = event.srcElement;
  var r =e.createTextRange();
  r.moveStart('character',e.value.length);
  r.collapse(true);
  r.select();
}
function cc(tt)
{
  if(!(event.keyCode==8 || event.keyCode==46)){ //允许删除
  switch (tt.value.length){
     case 4 :
        tt.value = tt.value+"-"
        break;
     case 7 :
        tt.value = tt.value+"-"
        break;
     }
  }
  tt.focus();
}
</script>

解决方案 »

  1.   

    meizz(梅花雨) ,不太灵啊,
      

  2.   

    多谢 richardluopeng(罗罗) 的提醒:因为我用的事件是 onkeyup ,所以在按住一个键不放的时候会不太灵光,现我改用 onkeypress 事件应该行了。<input type=text name=ddd maxlength=10 size=10
     onkeypress=cc(this) onfacos=ff() onpaste="return false;"><script language=Javascript>
    function ff() //控制光标位置
    {
      var e = event.srcElement;
      var r =e.createTextRange();
      r.moveStart('character',e.value.length);
      r.collapse(true);
      r.select();
    }
    function cc(tt)
    {
      if(!(event.keyCode==8 || event.keyCode==46)){ //允许删除
      switch (tt.value.length){
         case 4 :
            tt.value = tt.value+"-"
            break;
         case 7 :
            tt.value = tt.value+"-"
            break;
         }
      }
      tt.focus();
    }
    </script>
      

  3.   

    这有一个例子:
    <html><head><title>效验日期</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <SCRIPT LANGUAGE="JavaScript">
    <!-- Begin
    function check_date(field){
    var checkstr = "0123456789";
    var DateField = field;
    var Datevalue = "";
    var DateTemp = "";
    var seperator = ".";
    var day;
    var month;
    var year;
    var leap = 0;
    var err = 0;
    var i;
       err = 0;
       DateValue = DateField.value;
       /* Delete all chars except 0..9 */
       for (i = 0; i < DateValue.length; i++) {
      if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
         DateTemp = DateTemp + DateValue.substr(i,1);
      }
       }
       DateValue = DateTemp;
       /* Always change date to 8 digits - string*/
       /* if year is entered as 2-digit / always assume 20xx */
       if (DateValue.length == 6) {
          DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
       if (DateValue.length != 8) {
          err = 19;}
       /* year is wrong if year = 0000 */
       year = DateValue.substr(4,4);
       if (year == 0) {
          err = 20;
       }
       /* Validation of month*/
       month = DateValue.substr(2,2);
       if ((month < 1) || (month > 12)) {
          err = 21;
       }
       /* Validation of day*/
       day = DateValue.substr(0,2);
       if (day < 1) {
         err = 22;
       }
       /* Validation leap-year / february / day */
       if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
          leap = 1;
       }
       if ((month == 2) && (leap == 1) && (day > 29)) {
          err = 23;
       }
       if ((month == 2) && (leap != 1) && (day > 28)) {
          err = 24;
       }
       /* Validation of other months */
       if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
          err = 25;
       }
       if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
          err = 26;
       }
       /* if 00 ist entered, no error, deleting the entry */
       if ((day == 0) && (month == 0) && (year == 00)) {
          err = 0; day = ""; month = ""; year = ""; seperator = "";
       }
       /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
       if (err == 0) {
          DateField.value = day + seperator + month + seperator + year;
       }
       /* Error-message if err != 0 */
       else {
          alert("Date is incorrect!");
          DateField.select();
      DateField.focus();
       }
    }
    //  End -->
    </script>
    </HEAD>
    <BODY bgcolor="#FFFFFF" text="#000000">
    <CENTER>
      效验日期 
      <FORM name="datecheck">
    <TABLE border="0" width="60%">
        <TR>
       <TD>
        Enter Date (Use European format shown at right)<P>
       <INPUT type="text" name=testdat size='10' maxlength="10" onblur="check_date(this)">
       <INPUT type= "submit" name="button" value="Press to Validate"><p>
    (Date is validated after leaving the field.)
        </TD>
        <TD>
       <b>ddmmyy</b> (171201)   or <BR>
       <b>ddmmyyyy</b> (17122001) or <BR>
       <b>ddXmmXyy</b> (17-12-01 or 17y12q01 ... ) or <BR>
       <b>ddXmmXyyyy</b> (17.12.2001 or 17,12,2001 ...) <br>
       where "X" is any sign not in 0..9, i.e. "-" or "/"<p>
       </TD>
        </TR>
    </TABLE></FORM></CENTER></body></html>
      

  4.   

    谢谢meizz(梅花雨), 还有richardluopeng(罗罗) ,fhfpku(其实我是卧底) ;对了, 不过我说掉了一点:
    当用户要修改这个文本框内的时间时为了方便(是否可以把二个"-"定住, 不让动,不能修改成其他的,也不能删除, 也不能选中) 不知高手能否做到?先谢了
      

  5.   

    真够累的。直接写在三个input 里不就行了 ,提交后再合成嘛。
      

  6.   

    三个input那是很简单的,就不用放上来讨论了,(问题在特定的环境下就需要一个input)