2014-08-29 68 views
0

我正在使用HTML datetime-local元素从用户获取日期时间。此输入字段的问题在于,它允许用户输入无法转换为JavaScript对象的值。一些可能投入太大,比如下面的日期是太大:是否有可能使HTML datetime-local元素只产生有效日期?

invalid date

这是当我使用JavaScript它的价值会发生什么:

var input = document.getElementById("__Date"); 
var time = input.value; // is "121212-12-12T12:12" right now 
var value = new Date(time); // I get an error here - "Invalid Date" 

下面是完整的元素题。我正在使用Google Chrome v37来运行此代码。

<input type="datetime-local" class="input-block-level EditableAttributeValue" autocomplete="off" autocorrect="off" id="__Date" max="2015-00-00T00:00:00:00"> 

我需要一种方法,以禁止这些无效输入,优选不使用任何JavaScript来收听变化和手工验证输入。

+0

没有JavaScript就无法真正做到。你受到浏览器的支配。去一个JavaScript解决方案,有很多日期/时间格式库,以及大量的日期/时间选择器。 – mason 2014-08-29 19:13:54

+3

JavaScript代码与HTML代码(不同的'id'值)不匹配。马库肯定你包括*真实*代码,再现这个问题。 – 2014-08-29 19:15:31

+0

在HTML中有最大的属性,为什么不解决这个问题? – 2014-08-29 19:18:57

回答

1

虽然无法使用Date()对象解析datetime-local的值,但您可以通过input.valueAsNumber属性获取有效日期,然后转换为日期。这解决了问题并消除了对这种验证的需求。使用方法如下:

var input = document.getElementById("__Date"); 
var dateNumber = input.valueAsNumber; 
var date = new Date(dateNumber); // this is a valid date now - "Tue Dec 11 121212 16:00:00 GMT-0800 (Pacific Standard Time)" 
+0

当我在Chrome 37(Win 7)中测试时,我得到'null'。 – 2014-08-29 19:48:00

+0

尝试这个网站:http://javascriptref.com/3ed/ch13/valueasdate.html,输入任何日期似乎工作。 – 2014-08-29 19:53:39

+0

第二个想法是,它只显示'date',这里我使用'datetime-local'。我修复了我的答案,使它适用于'datetime-local'输入。 – 2014-08-29 19:57:52

相关问题