有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript动态添加按钮,同时动态添加文本框

我有以下JSFIDLE代码:

http://jsfiddle.net/rnnb32rm/285/

<div ng-app="angularjs-starter" ng-controller="MainCtrl">
   <fieldset  data-ng-repeat="choice in choicesA">
      <input type="text" ng-model="choice.name" name="" placeholder="Enter name">
         <button class="addfields" ng-click="addNewChoice()">Add fields</button>
      <button class="remove" ng-click="removeChoice()">-</button>
   </fieldset>


   <div id="choicesDisplay">
      {{ choicesA }} <br/>
      {{ choicesB }}
   </div>
</div>

JS:

var app = angular.module('angularjs-starter', []);

  app.controller('MainCtrl', function($scope) {

  $scope.choicesA = [{id: 'choice1'}, {id: 'choice2'}];

  $scope.choicesB = [];

  $scope.addNewChoice = function() {
    var newItemNo = $scope.choicesA.length+1;
    $scope.choicesA.push({'id':'choice'+newItemNo});
  };

  $scope.removeChoice = function() {
    var lastItem = $scope.choicesA.length-1;
    $scope.choicesA.splice(lastItem);
  };

});

如您所见,我有一个函数addNewChoice(),它将对象添加到数组choicesA,然后根据choicesA数组上的对象编号添加文本框

只有当我单击第一个{}上的{}按钮时,我才需要将文本框添加到第一个{},并且我在这些生成的文本框上写入的数据被绑定并添加到{}数组的单独对象中。对于所有其他Add fields按钮也是如此(因此每个Add field按钮只能将文本框添加到自己的fieldset标记),这也会根据choicesA数组中的对象数生成

我什么都试过了,就是想不出来。如果有点不清楚,我可以解释得更多。提前谢谢你

编辑:感谢大家的大力帮助,让我解释一下:

我有一个springrestapi和两个名为Resource&;操作,对象资源包含操作列表,操作包含对资源的引用

当我加载一个页面时,我得到一个Resource对象数组,这些对象是我已经保存的,通过$http从数据库返回的。get()方法,名为choicesA,数组结构如下:

[
{"idResource":1, "nameResource": "resName1"},
{"idResource":2, "nameResource": "resName2"}
......etc depends oh how much rows I got from the DB
]

我有另一个方法,$http。post()用于发布名为choicesBAction对象数组,该数组是一个独立的非嵌套数组。数组结构如下所示:

[
{"idAction":1, "nameAction":"nameAction1", "resource": 
   {"idResource":1, "nameResource": "resName1"},
{"idAction":2, "nameAction":"nameAction2", "resource": 
   {"idResource":2, "nameResource": "resName2"},
   ..
}
{...},
{...}
...
]

因此choicesA数组包含我使用$http获得的Resource对象。get(),然后我想填充choicesB数组中的Action对象,然后使用$http保存数组。post(),每个Action应该包含一个Resource对象。例如,如果我单击在第一个fieldset标记中添加更多操作,意味着我希望填充choicesB数组中的第一个Action对象,并将位于choicesA数组中的第一个Resource对象分配给它

我希望能够确定操作的数量并填写它们,然后将它们保存到choicesB数组中。但是每个动作都与我描述的特定Resource对象相关

我希望现在清楚了,对不起&;再次感谢你


共 (3) 个答案

  1. # 1 楼答案

    也许我误解了你的问题。也许这会帮助你解决问题

    关于jsfiddle的实时示例

    &13; 第13部分,;
    var app = angular.module('angularjs-starter', []);
    
    app.controller('MainCtrl', function($scope) {
    
      $scope.choicesA = [{
        id: 'choice1',
        choicesB:[]
      }, {
        id: 'choice2',
        choicesB:[]
      }];
    
    
      $scope.addNewChoice = function() {
        var newItemNo = $scope.choicesA.length + 1;
        $scope.choicesA.push({
          'id': 'choice' + newItemNo,
          choicesB:[]
        });
      };
    
      $scope.removeChoice = function(ind) {
        $scope.choicesA.splice(ind,1);
      };
    
      $scope.addNewChoiceB = function(choice) {
        var newItemNo = choice.choicesB.length + 1;
        choice.choicesB.push({
          'id': 'choice' + newItemNo
        });
      };
    
      $scope.removeChoiceB = function(choice,ind) {
        choice.choicesB.splice(ind,1);
      };
    
    });
    fieldset {
      background: #FCFCFC;
      padding: 16px;
      border: 1px solid #D5D5D5;
    }
    
    .addfields {
      margin: 10px 0;
    }
    
    #choicesDisplay {
      padding: 10px;
      background: rgb(227, 250, 227);
      border: 1px solid rgb(171, 239, 171);
      color: rgb(9, 56, 9);
    }
    
    .remove {
      background: #C76868;
      color: #FFF;
      font-weight: bold;
      font-size: 21px;
      border: 0;
      cursor: pointer;
      display: inline-block;
      padding: 4px 9px;
      vertical-align: top;
      line-height: 100%;
    }
    
    input[type="text"],
    select {
      padding: 5px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="angularjs-starter" ng-controller="MainCtrl">
      <button class="addfields" ng-click="addNewChoice()">Add choice</button>
      <fieldset data-ng-repeat="choice in choicesA">
        <input type="text" ng-model="choice.name" name="" placeholder="Enter name">
        <button class="remove" ng-click="removeChoice($index)">-</button>
        <button class="addfields" ng-click="addNewChoiceB(choice)">Add fields</button>
        <div data-ng-repeat="choiceb in choice.choicesB">
          <input type="text" ng-model="choiceb.name" name="" placeholder="Enter field">
          <button class="remove" ng-click="removeChoiceB(choice,$index)">-</button>
        </div>
      </fieldset>
    
    
      <div id="choicesDisplay">
        <pre>choicesA = {{ choicesA }}</pre>
        <pre data-ng-repeat="choiceb in choicesA">choicesB = {{ choiceb.choicesB }}</pre>
      </div>
    </div>
    和#13;
    和#13;

    已更新

    关于jsfiddle的实时示例

  • # 2 楼答案

    我相信你要做的是有两个嵌套数组

    然后您将嵌套ng-repeat。通过将该数组作为函数的参数传递,可以跟踪哪个数组

    看法

     <fieldset data-ng-repeat="group in choices">
        <div ng-repeat="choice in group">
          <input type="text" ng-model="choice.name" name="" placeholder="Enter name">
          <button class="addfields" ng-click="addNewChoice(group)">Add fields</button>
          <button class="remove" ng-click="removeChoice(group)">-</button>
        </div>
     </fieldset>
    

    JS

    $scope.choices = [
      // first group
      [{id: 'choice1'}, { id: 'choice2'}],
      //second group
      [{}]
    ];
    
    
    $scope.addNewChoice = function(group) {
      var newItemNo = group.length + 1;
      group.push({
        'id': 'choice' + newItemNo
      });
    };
    
    $scope.removeChoice = function(group) {
      group.pop();
    }; 
    

    注意,您需要稍微修改一下ID系统。通常,这将来自服务器无论如何

    DEMO

  • # 3 楼答案

    <div ng-app="angularjs-starter" ng-controller="MainCtrl">
    <fieldset>
    <input  data-ng-repeat="choice in choicesA" type="text" ng-model="choice.name" name="" placeholder="Enter name">
    <button class="addfields" ng-click="addNewChoice()">Add fields</button>
    <button class="remove" ng-click="removeChoice()">-</button>
    </fieldset>     
    

    您要求的第一部分通过将文本框添加到单独的字段集来解决,第二部分要求我不清楚,请用此替换您的htmlcode