我在输入文本字段上使用蒙版输入来获取MM / YYYY格式的日期。 (http://digitalbush.com/projects/masked-input-plugin/)
我的javascript代码:
jQuery(function($){
$(".date").mask("12/2099");
});
和HTML代码:
<input type="text" class="date">
当我开始写东西的时候,它会把12/2099的值带到字段中,并且不可能写其他东西。
如果在javascript掩码中我写99/9999,用户可以写日期是假的...所以我不是我必须做的事情?
我希望用户可以在01/1990开始写作,直到12/2099,可能会添加限制日期值+ 20年或类似的东西...
答案 0 :(得分:5)
嗯,我认为有掩码输入是好的,但我更喜欢验证输入值,因为这些插件通常适用于内部的正则表达式。
我的解决办法可能是:
(编辑和测试)
为邮件添加div
<form id="frm">
<input type="text" class="date">
<div id="msg"></div>
<input type="submit" value="Click Me"/>
</form>
js:
<script type="text/javascript">
function verifyDate(datevalue) {
var done = false;
if(datevalue != null || datevalue != ''){
//split the date as a tmp var
var tmp = datevalue.split('/');
//get the month and year
var month = tmp[0];
var year = tmp[1];
if(month >= 1 && month <= 12){
if(year >= 1990 && year <= 2099){
//clean the message
clean();
//finally, allow the user to pass the submit
done = true;
} else {
$('#msg').html('Year must be from 1990 - 2099.');
}
} else {
$('#msg').html('Month is invalid.');
}
}
return done;
}
function clean() {
$('#msg').html('');
}
jQuery(function($) {
//mask the input
$(".date").mask("12/2099");
$('#frm').submit(function() {
var datevalue = $('.date').val();
return verifyDate(datevalue)
});
$(".date").keyup(function(){
//get the date
var datevalue = $(this).val();
//only if the date is full like this: 'xx/xxxx' continue
if(datevalue.length == 7) {
verifyDate(datevalue);
} else {
clean();
}
});
});
</script>
希望这有帮助。
问候。
答案 1 :(得分:5)
我可以建议其他解决方案。我已经修改了一点奥斯卡的解决方案。 我使用了Josh Bush's屏蔽输入插件。此插件仅用于引导用户输入而无需任何验证。我将领导与验证结合起来。 这是我的代码:
<script src="@Links.Scripts.MaskedInput_js"></script>
<script>
$.mask.definitions['y'] = '[12]';
$.mask.definitions['m'] = '[01]';
$.mask.definitions['d'] = '[0-3]';
$("#BirthDay").mask("d9/m9/y999", { placeholder: " " });
$("#BirthDay").keyup(function () {
var datevalue = $(this).val();
if (datevalue.trim().length == 10) {
verifyDate(datevalue);
}
})
function verifyDate(datevalue) {
var done = false;
if (datevalue != null || datevalue != '') {
var tmp = datevalue.split('/');
var day = tmp[0];
var month = tmp[1];
var year = tmp[2];
var fromYear = 1900;
var now = new Date();
if (day >= 1 && day <= 31) {
if (month >= 1 && month <= 12) {
if (year >= fromYear && year <= now.getFullYear()) {
clean();
done = true;
} else {
$('#msg').html('Year must be between' + " " + fromYear + " - " + now.getFullYear());
}
} else {
$('#msg').html('Month is invalid');
}
} else {
$('#msg').html('Day is invalid');
}
}
return done;
}
function clean() {
$('#msg').html('');
}
</script>
当然,这不是一个全面的客户端日期验证(例如,此处无法验证此日期,例如30/02/2013)。我必须使用该服务器端日期验证。
但是,这个解决方案可以减轻客户的错误。