如何自动格式化文本框输入

时间:2013-10-31 14:44:05

标签: javascript jquery html jsp servlets

<tr>
   <td><label>Birthdate</label>
      <input type="text" placeholder="mm/dd/yyyy" name="birthdate" maxlength="10"/>
   </td>
</tr>

好吧,我的代码正在运行,但我希望我的“输入类型文本”自动格式化为日期(html 5输入类型=日期),因为在我的Servlet中我将其转换为Age。 问题是,如果我使用“输入类型=日期”,转换是错误的,所以我决定使用“输入类型=文本”,它正在工作。那么可以自动将“/”设置为“mm / dd / yyyy”格式吗?例如,如果用户输入2个字符,则“/”将自动输入等。


出生日期的Servlet

        String birthdate = request.getParameter("birthdate");


        int monthDOB = Integer.parseInt(birthdate.substring(0, 2));
        int dayDOB = Integer.parseInt(birthdate.substring(3, 5));
        int yearDOB = Integer.parseInt(birthdate.substring(6, 10));

        DateFormat dateFormat = new SimpleDateFormat("MM");
        java.util.Date date = new java.util.Date();
        int thisMonth = Integer.parseInt(dateFormat.format(date));

        dateFormat = new SimpleDateFormat("dd");
        date = new java.util.Date();
        int thisDay = Integer.parseInt(dateFormat.format(date));

        dateFormat = new SimpleDateFormat("YYYY");
        date = new java.util.Date();
        int thisYear = Integer.parseInt(dateFormat.format(date));

        int calAge = thisYear - yearDOB;

        if (thisMonth < monthDOB) {
            calAge = calAge - 1; 
        }

        if (thisMonth == monthDOB && thisDay < dayDOB) {
            calAge = calAge - 1;
        }

        String age = Integer.toString(calAge);

以表格

更新
<tr>
    <td><label for="inputName">Birthdate</label>
       <input type="text" placeholder="mm/dd/yyyy" id="input_date" name="birthdate" maxlength="10"  />
    </td>
</tr>

来源更新

<script src="../scripts/formatter.js"></script>
<script src="../scripts/formatter.min.js"></script>
<script src="../scripts/jquery.formatter.js"></script>
<script src="../scripts/jquery.formatter.min.js"></script>

添加了脚本

<script>
     $('#input_date').formatter({
       'pattern': '{{99}}/{{99}}/{{9999}}',
       'persistent': true
     });
</script>

我也尝试了javascript,但它不起作用......

4 个答案:

答案 0 :(得分:2)

我一直在观看GitHub上的一个项目(并提供反馈以改进它),因为这种格式称为formatter.js http://firstopinion.github.io/formatter.js/demos.html这可能只是你正在寻找的东西。< / p>

这不会阻止你输入像5月53日那样的日期......但它会帮助你格式化。

new Formatter(document.getElementById('date-input'), {
  'pattern': '{{99}}/{{99}}/{{9999}}',
  'persistent': true
});

$('#date-input').formatter({
  'pattern': '{{99}}/{{99}}/{{9999}}',
  'persistent': true
});

答案 1 :(得分:2)

使用jquery的datepicker api 这是链接Datepicker

这是工作代码

<tr>
   <td><label>Birthdate</label>
      <input type="text" placeholder="mm/dd/yyyy" name="birthdate" id="birthdate" maxlength="10"/>
   </td>
</tr>

<script>
  $(function() {
    $( "#birthdate" ).datepicker();
  });
</script>

编辑

$("input[name='birthdate']:first").keyup(function(e){
    var key=String.fromCharCode(e.keyCode);
    if(!(key>=0&&key<=9))$(this).val($(this).val().substr(0,$(this).val().length-1));
    var value=$(this).val();
    if(value.length==2||value.length==5)$(this).val($(this).val()+'/');
});

这是您可能需要的代码

这是fiddled code

答案 2 :(得分:2)

我有一个使用jquery-ui datepicker的替代方法,没有formatter.js。它旨在从keyupchange事件中调用。它增加了零填充。它通过从dateFormat字符串构造表达式,使用各种支持的日期格式。我想不到用不到三次替换来做到这一点的方法。

// Example: mm/dd/yy or yy-mm-dd
var format = $(".ui-datepicker").datepicker("option", "dateFormat");

var match = new RegExp(format
    .replace(/(\w+)\W(\w+)\W(\w+)/, "^\\s*($1)\\W*($2)?\\W*($3)?([0-9]*).*")
    .replace(/mm|dd/g, "\\d{2}")
    .replace(/yy/g, "\\d{4}"));
var replace = "$1/$2/$3$4"
    .replace(/\//g, format.match(/\W/));

function doFormat(target)
{
    target.value = target.value
        .replace(/(^|\W)(?=\d\W)/g, "$10")   // padding
        .replace(match, replace)             // fields
        .replace(/(\W)+/g, "$1");            // remove repeats
}

https://jsfiddle.net/4msunL6k/

答案 3 :(得分:0)

user2897690 有正确的想法,但它不接受Numpad数字。所以拿了他们的javascript并将其修改为工作。

以下是我对其代码的解释以及添加的功能。

$("input[name='birthdate']:first").keyup(function(e){
    var chars = [48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105];
    var key=chars.indexOf(e.keyCode);
    console.log(key);
    if(key==-1)$(this).val($(this).val().substr(0,$(this).val().length-1));
    var value=$(this).val();
    if(value.length==2||value.length==5)$(this).val($(this).val()+'/');
});