AngularJS:实现动态添加输入控件功能
功能要求如下:
1.    点击加号可以增加输入框。
2.    点击减号可以减少输入框。
3.    当输入框只有一个的时候,不能再减少输入框。
效果图如下:
只有一个输入框
有多个输入框
要实现这个功能,可以用angularJS实现。实现步骤如下:
1.    在HTML中引入script
<script type='text/javascript' src='path/to/angular.min.js'></script>
2. HTML部分代码如下:
<div class="form-group" ng-controller="SendSafeMessageController">
<label class="col-md-2 control-label">答复内容:</label>
<div class="col-md-10">
<div ng-repeat="reply in fchat.replies">
<div class="form-group">
<div class="col-md-12">
<div class="col-md-1">
<label for="reply{{$index + 1}}">回答{{$index + 1}}</label>
</div>
<div class="col-md-9">
<input type="text" class="form-control" ng-model="reply.value"
id="reply{{$index + 1}}" name="reply{{$index + 1}}" />
</div>
<div class="col-md-2 img-link">
<a href="" ng-click="fchat.incrReply($index)">
<img src="/images/plus.png" alt="plus" width="30px" height="30px" />
</a>
<a href="" ng-click="fchat.decrReply($index)" ng-show="fchat.canDescReply">
<img src="/images/minus.png" alt="minus" width="30px" height="30px"/>
</a>
<img src="/images/dis_minus.png" alt="minus" width="30px" height="30px"
ng-show="!fchat.canDescReply"/>
</div>
</div>
</div>
</div>
<input type="hidden" id="replies" name="replies" value="{{fchat.combineReplies()}}" />
</div>
</div>
SendSafeMessageController.js代码如下:
 var ftitAppModule = angular.module('ftitApp', []);
 ftitAppModule.controller('SendSafeMessageController',
     function ($scope, $log) {
         $scope.fchat = new Object();
         $scope.fchat.replies = [{key: 0, value: ""}];
         // 初始化时由于只有1条回复,所以不允许删除
         $scope.fchat.canDescReply = false;
         // 增加回复数
         $scope.fchat.incrReply = function($index) {
             $scope.fchat.replies.splice($index + 1, 0,
                 {key: new Date().getTime(), value: ""});   // 用时间戳作为每个item的key
             // 增加新的回复后允许删除
             $scope.fchat.canDescReply = true;
         }
         // 减少回复数
         $scope.fchat.decrReply = function($index) {
             // 如果回复数大于1,删除被点击回复
             if ($scope.fchat.replies.length > 1) {
                 $scope.fchat.replies.splice($index, 1);
             }
             // 如果回复数为1,不允许删除
             if ($scope.fchat.replies.length == 1) {
                 $scope.fchat.canDescReply = false;
             }
         }
         $scope.fchat.combineReplies = function() {
             var cr = "";
             for (var i = 0; i < $scope.fchat.replies.length; i++) {
                 cr += "#" + $scope.fchat.replies[i].value;
             }
             cr = cr.substring(1);
             $log.debug("Combined replies: " + cr);
             return cr;
         }
     }
 );
需要注意的是,由于输入框是动态添加,所以事先我们是不知道到底有多少数据是可以传给服务器的,所以在js中用了一个combineReplies函数来将所有的输入框内容合并成一个数值,用#作为分隔符分开,然后放到一个hidden输入框中来传值给服务器。
AngularJS:实现动态添加输入控件功能的更多相关文章
- AngularJS:实现动态添加输入控件功能(转)
		http://www.cnblogs.com/ilovewindy/p/3849428.html <!DOCTYPE html> <html> <head> < ... 
- 谨记给UpdatePanel中动态添加的控件赋ID
		原文:谨记给UpdatePanel中动态添加的控件赋ID 昨天下定决 心对上次做的布局编辑器控件加以改进,其中最主要变化的就是要完全使用ASP.NET AJAX!但是很遗憾,虽然耳闻已久,但目前对AS ... 
- ASP.NET动态添加用户控件的方法
		本文实例讲述了ASP.NET动态添加用户控件的方法.分享给大家供大家参考.具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返 ... 
- 动态添加easyui 控件
		jquery提供了append,appendTo方法,可以动态添加静态的html文本,在easyui中,要动态添加easyui控件要怎么做呢,下面就来介绍动态添加easyui控件. 使用方法:和添加静 ... 
- C# WinForm动态添加MSChart控件
		添加mschart.dll动态链接库 添加引用 System.Windows.Forms.DataVisualization MSChart控件作为方便的用户数据展示控件,可以方便的使用控件提 ... 
- js动态添加file控件
		<html></head><script language="javascript" type="text/ecmascript" ... 
- duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
		转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947 这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够 ... 
- AX 用代码创建FORM动态加控件,重载动态添加的控件的方法。
		eg. 范例:class\RFIDReadWriteForm/Build方法. formRun.controlMethodOverload(true); formRun.controlMethodOv ... 
- VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)
		新建空白窗体,然后粘帖下面代码: Option ExplicitPublic WithEvents br As VBControlExtender Private Sub br_ObjectEvent ... 
随机推荐
- MiniProfiler监控调试MVC5以及EntityFramework6性能
			想要通过在MVC中view中直观的查看页面加载以及后台EF执行情况,可以通过MiniProfiler小工具来实现. 但是从网上搜索的相关信息要么是MVC4下的老版本的MiniProfiler,要么就是 ... 
- ie9/8的iframe中jQuery报错
			此文章用于对工作中遇到的问题进行记录 jQuery 版本:1.9.1 按照一般的思路,jquery 1.x的是支持ie9及以下的,但是今天发现jquery报错了,代码错误位置在源码版本的第4888行 ... 
- day01_14.遍历数组
			<?php $a = array('a','b','c'); print_r($a); ?> 输出结果:Array ( [0] => a [1] => b [2] => ... 
- 如何在 Rails 中搭配 Turbolinks 使用 Vue
			[Rails] Vue-outlet for Turbolinks 在踩了 Rails + Turbolinks + Vue 的許多坑後,整理 的作法並和大家分享. Initialize the A ... 
- 为什么在header 和 session 之前不能有输出
			1.在header输出之前有输出内容的话,就会造成对header的错误理解(尽管现在已经能容错了),例如不是满足“keyword: value\n”的格式还好,直接错误了,但是满足“keyword: ... 
- hdu1599 find the mincost route   floyd求出最小权值的环
			find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ... 
- No entity found for query异常
			错误为getSingleResult();获取值时获取不到报异常. getSingleResult的源码有一句: @throws EntityNotFoundException if there is ... 
- iOS学习笔记46-Swift(六)扩展
			一.Swift扩展 扩展就是向一个已有的类.结构体或枚举类型添加新功能,这包括在没有权限获取原始源代码的情况下扩展类型的能力.扩展和 Objective-C中的分类(category)类似,但是它要比 ... 
- 【Luogu】P3768简单的数学题(杜教筛)
			题目链接 emm标题全称应该叫“莫比乌斯反演求出可狄利克雷卷积的公式然后卷积之后搞杜教筛” 然后成功地困扰了我两天qwq 我们从最基本的题意开始,一步步往下推 首先题面给出的公式是$\sum\limi ... 
- VK Cup 2016 - Qualification Round 1——B. Chat Order(试手stack+map)
			B. Chat Order time limit per test 3 seconds memory limit per test 256 megabytes input standard input ... 
