我正在尝试为两个输入日期时间 - 本地字段设置默认值。我正在使用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));
});
我到了 很好地填写日期字段,
到目前为止一切都那么好,但是当我提交表单时,这些字段是通过发送的 空值。
答案 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());
现在它正在发挥作用,非常感谢你!