Angularjs:正确设置datetime-local,但提交null

时间:2016-05-13 07:34:24

标签: javascript jquery angularjs datetime

我正在尝试为两个输入日期时间 - 本地字段设置默认值。我正在使用angularjs 1.5.5。我的.jsp代码如下所示:

<div class="row">
    <div class="form-group col-md-12">
        <label class="col-md-2 control-label" for="dateTo">Date to</label>
        <div class="col-md-7">
            <input type="datetime-local" ng-model="ctrl.map.dateTo" id="dateTo" class="form-control input-sm" />
        </div>
    </div>
</div>

(类似于第二个字段)

这是我设置字段的js脚本:

$(document).ready(function(){
    var now = new Date();

    var timestampDateTo   = now.getTime() - now.getTimezoneOffset()*60000;
    var timestampDateFrom = now.getTime() - now.getTimezoneOffset()*60000 - 2*60*60*1000;

    var dateTo = new Date(timestampDateTo);
    var dateFrom = new Date(timestampDateFrom);

    $("input[id=dateTo]").val(dateTo.toISOString().substring(0,19));
    $("input[id=dateFrom]").val(dateFrom.toISOString().substring(0,19));
});

我到了 很好地填写日期字段,

enter image description here

到目前为止一切都那么好,但是当我提交表单时,这些字段是通过发送的 空值。

enter image description here  这是为什么?请注意,当我手动设置这些字段时,它们正在正确提交。

2 个答案:

答案 0 :(得分:1)

这是因为您正在设置值,您正在直接更改DOM并且Angular没有接收到更改,您应该更改ng-model对象,而不是DOM。在你的控制器/ Angular代码中你应该有类似的东西:

var now = new Date();

var timestampDateTo   = now.getTime() - now.getTimezoneOffset()*60000;
var timestampDateFrom = now.getTime() - now.getTimezoneOffset()*60000 - 2*60*60*1000;

var dateTo = new Date(timestampDateTo);
var dateFrom = new Date(timestampDateFrom);

$scope.ctrl.map.dateTo = dateTo;

你应该避免在使用Angular时直接设置DOM值,这不是一个好习惯,更新范围内的Angular值并让Angular为你更新DOM

答案 1 :(得分:0)

@Daniel Dawes - 你是绝对正确的。我不知道,为什么我试图采用这种方式而不是角度来做这个。我将负责设置值的代码移动到我的控制器:

    System.out.println(inputs.stream()
        .filter(input -> input.attr("name").contains("__VIEWSTATE"))
        .map(input -> input.attr("name") + " " + input.attr("value"))
        .findFirst());

现在它正在发挥作用,非常感谢你!