我正在angularjs中创建表单。在其中,我通过点击"添加更多"按钮创建添加更多字段功能。我已经实现了添加更多的功能使用javascript。下面是HTML的代码:
<form method="POST" name="form" ng-submit="insert(user)" role="form">
<div class="top_gets" id="innerdivs">
<input ng-model="user.amount" type="text"/>
<input ng-model="user.description" type="text"/>
<input type="submit" onclick="addMore();" value="Add more"/>
<input type="submit" value="Save & Continue" class="save_gets" />
</div>
</form>
下面是Javascript代码:<script>
var counter = 0;
function addMore() {
counter += 1;
var div = document.getElementById('innerdivs');
var innerdiv = '<div id="innerdivs"><!-- Same Form Field Elements---></div>';
$('#innerdivs').append(innerdiv);
}
</script>
我的问题是,每当我通过点击"添加更多"按钮添加更多字段并提交表单时,只有第一次加载的输入字段post/发送数据意味着新附加的字段输入不post数据。无论使用javascript添加的字段是什么,它都不会工作,因为它的表单不会发送/发布输入。这适用于核心PHP,但在angularjs中不起作用。有没有办法在angularjs中解决这个问题?
你做得绝对不对。不能手动添加dom元素。相反,你应该在控制器中设置array并将新对象推入其中:
<form name="form" ng-submit="save(users)" role="form" ng-controller="addUserCtrl">
<div class="top_gets" ng-repeat="user in users">
<input ng-model="user.amount" type="text" />
<input ng-model="user.description" type="text"/>
<input type="button" ng-click="addMore();" value="Add more" />
<input type="submit" value="Save & Continue" class="save_gets" />
</div>
</form>
在控制器:angular.module(<module_name>).controller('addUserCtrl', ['$scope', function (scope) {
scope.users = [{}];
scope.addMore = function () {
scope.users.push({});
};
scope.save = function () {
// send `scope.users` to server with $http or $resource
};
}]);