更改开始日期时更新结束日期的JavaScript

时间:2014-10-17 12:14:00

标签: javascript forms javascript-events

对于我正在开发的网站,我使用表单来更新模型的不同字段。

其中一些字段需要根据其他字段的值进行更新。 例如,任务的每个实例都有一个开始日期,结束日期和长度,必须验证以下内容:结束=开始+长度(周末不计算,但这是次要问题)。

所以我试图编写的函数之一就是:

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>

任何暗示使其成功的解决方案都将受到极大的赞赏。 提前谢谢。

1 个答案:

答案 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-DDYYYY-MM-DDTHH:MM:SS)可用于创建新日期。

start = new Date(document.getElementById('id_start').value);

现在,start实际上是一个日期对象,您可以添加以天为单位的长度来获取结束日期。

当然,您要确保输入的格式可接受!有很多日期选择器&#39;选项(例如,jQueryUi有一个日期选择器),如果您只对支持Chrome感兴趣,那么效果很好。