我需要使用AngularJS的订单跟踪功能来制作一个简单的表单。我创建了以下jsfiddle:http://jsfiddle.net/MVVcf/2/AngularJS提交的意外行为输入
当我们第一次按下回车键时,提交正在工作,但第二个(和下一个)命中不起作用并清除了上述行中的所有项目。
奇怪的是,当我们随时点击“添加”按钮everythink效果很好。
HTML:
<div data-ng-app="OrderApp" data-ng-controller="OrderController" class="container">
<h1>Order</h1>
<hr/>
<form role="form" name="form" data-ng-submit="add(form)" novalidate>
<table class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th class="who" colspan="2">Who</th>
<th class="what">What</th>
<th class="actions">Actions</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="item in order.items">
<td><input type="checkbox" data-ng-model="item.selected" /></td>
<td data-ng-click="edit(item)">{{ item.who }}</td>
<td data-ng-click="edit(item)">{{ item.what }}</td>
<td style="text-align: center">
<button data-ng-click="delete($index)" class="btn btn-xs btn-danger"> x </button>
</td>
</tr>
<tr>
<td colspan="2">
<input name="who" type="text" placeholder="kto..." data-ng-model="formData.who" autofocus data-focus-on="submitted" required class="form-control" />
<div data-ng-show="submitted && form.who.$error.required">To pole jest wymagane</div>
</td>
<td>
<input name="what" type="text" placeholder="co..." data-ng-model="formData.what" required class="form-control" />
<span data-ng-show="submitted && form.what.$error.required">To pole jest wymagane</span>
</td>
<td>
<button type="submit" class="btn btn-primary">Add</button>
</td>
</tr>
</tbody>
</table>
</form>
JS:
angular.module('OrderApp', [])
.directive('focusOn', function() {
return function(scope, elem, attr) {
scope.$on(attr.focusOn, function(e) {
elem[0].focus();
});
};
})
.controller('OrderController', ['$scope', function ($scope) {
$scope.submitted = false;
$scope.focus = true;
$scope.order = {
items: []
};
$scope.toggle = function (item) {
item.selected = !item.selected;
};
$scope.add = function (form) {
if (form.$invalid) {
return;
}
$scope.order.items.push(angular.copy($scope.formData));
$scope.submitted = false;
$scope.$broadcast('submitted');
$scope.formData = null;
};
$scope.delete = function ($index) {
$scope.order.items.splice($index, 1);
};
}]);