对于我正在开发的网站,我使用表单来更新模型的不同字段。
其中一些字段需要根据其他字段的值进行更新。 例如,任务的每个实例都有一个开始日期,结束日期和长度,必须验证以下内容:结束=开始+长度(周末不计算,但这是次要问题)。
所以我试图编写的函数之一就是:
When the user changes the value of the input Start_date
Get that date from the input field
Get the value of the field Lenght
Update the value of the input "End date" with (Start_date + Lenght)
我的示例涉及的三个输入具有以下ID:id_start,id_lenght,id_finish。
这是我写的,但它根本不起作用(没有任何可见的事情......):
<script>
$( "#id_start" ).change(function() {
var start = new Date();
var finish = new Date();
var numberOfDays = document.getElementById('id_lenght').value;
start = document.getElementById('id_start').value;
finish.setdate(start.getDate()+document.getElementById('id_lenght'))
$('#id_finish').val(finish);
});
</script>
任何暗示使其成功的解决方案都将受到极大的赞赏。 提前谢谢。
答案 0 :(得分:1)
让我们看看你的代码实际上在做什么。
var start = new Date();
在这里,您可以创建一个新的Date
对象。
start = document.getElementById('id_start').value;
在这里,您将start
的值更改为ID =&#39; id_start&#39;的DOM元素的值。问题是,这个值不是Date对象。甚至新的HTML日期输入类型(Firefox或IE都不支持)只会在您提取值时为您提供一个字符串。因此,您已经创建了一个新的Date对象,然后立即将其丢弃。
所以现在开始不是Date
,而是string
。在这一行:
finish.setdate(start.getDate()+document.getElementById('id_lenght'))
您尝试在字符串对象上调用未定义的.getDate()
,因此您将收到错误消息。
这是您需要做的事情。该字符串(假设它采用ISO格式:YYYY-MM-DD
或YYYY-MM-DDTHH:MM:SS
)可用于创建新日期。
start = new Date(document.getElementById('id_start').value);
现在,start实际上是一个日期对象,您可以添加以天为单位的长度来获取结束日期。
当然,您要确保输入的格式可接受!有很多日期选择器&#39;选项(例如,jQueryUi有一个日期选择器),如果您只对支持Chrome感兴趣,那么效果很好。