zoukankan      html  css  js  c++  java
  • 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版

    上一次说到了基于Bootstrap使用jQuery实现输入框组input-group的添加与删除 ,初始状态下只有一个输入框组,可以通过点击输入框组的右侧“+”(或自定义的文字)可以在原输入框组的下面产生一个新的输入框组,通过点击输入框组的右侧“-”(或自定义的文字)可以删除当前输入框组。
            但是这样的输入框组还存在的许多不足之处,如问题一:我们在form表单中添加了这样一个输入框组,那么我们提交表单的时候怎么提交输入框输入的内容呢?(此时上回讲到的输入框组的输入框或文本域还未定义name属性)此外,问题二:那假如我希望初始的输入框组中输入框或文本域就有值肿么办?多个输入框组的内容呈现又如何呢?
    针对这样的问题,对上一次自定义的输入框组插件进行了一定的修改。对于问题一,为插件添加 field 配置设置;对于问题二,为插件添加 data 配置设置(解决该问题,有点类似采用了递归的思想,当构建出一个输入框组后,通过触发该输入框组的添加功能(添加按钮的点击事件),在当前输入框组下面产生新的输入框组,同理,直到产生与 data 属性传入的数组长度为止,此时不再触发点击事件)
           修改如下:
    inputGroup-1.1.js
    [javascript] view plain copy
     
    1. /** 
    2.  * Created by DreamBoy on 2016/6/4. 
    3.  */  
    4. /** 
    5.  * Created by DreamBoy on 2016/4/29. 
    6.  */  
    7. $(function() {  
    8.     $.fn.initInputGroup = function (options) {  
    9.         //1.Settings 初始化设置  
    10.         var c = $.extend({  
    11.             widget: 'input',  
    12.             add: "<span class="glyphicon glyphicon-plus"></span>",  
    13.             del: "<span class="glyphicon glyphicon-minus"></span>",  
    14.             field: '',  
    15.             data: []  
    16.         }, options);  
    17.   
    18.         var _this = $(this);  
    19.     _this.children().remove();
    20.         //添加序号为1的输入框组  
    21.         addInputGroup(1);  
    22.   
    23.         /** 
    24.          * 添加序号为order的输入框组 
    25.          * @param order 输入框组的序号 
    26.          * @param data 初始化输入框组中的数据 
    27.          */  
    28.         function addInputGroup(order) {  
    29.   
    30.             //1.创建输入框组  
    31.             var inputGroup = $("<div class='input-group' style='margin: 10px 0'></div>");  
    32.             //2.输入框组的序号  
    33.             var inputGroupAddon1 = $("<span class='input-group-addon'></span>");  
    34.             //3.设置输入框组的序号  
    35.             inputGroupAddon1.html(" " + order + " ");  
    36.   
    37.             //4.创建输入框组中的输入控件(input或textarea)  
    38.             var widget = '', inputGroupAddon2;  
    39.             if(c.widget == 'textarea') {  
    40.                 widget = $("<textarea class='form-control' style='resize: vertical;'></textarea>");  
    41.                 widget.html(c.data[order - 1]);  
    42.                 inputGroupAddon2 = $("<span class='input-group-addon'></span>");  
    43.             } else if(c.widget == 'input') {  
    44.                 widget = $("<input class='form-control' type='text'/>");  
    45.                 widget.val(c.data[order - 1]);  
    46.                 inputGroupAddon2 = $("<span class='input-group-btn'></span>");  
    47.             }  
    48.   
    49.             //5.设置表单提交时的字段名  
    50.             if(c.field.length == 0) {  
    51.                 widget.prop('name', c.widget + 'Data[]');  
    52.             } else {  
    53.                 widget.prop('name', c.field + '[]');  
    54.             }  
    55.   
    56.   
    57.             //6.创建输入框组中最后面的操作按钮  
    58.             var addBtn = $("<button class='btn btn-default' type='button'>" + c.add + "</button>");  
    59.             addBtn.appendTo(inputGroupAddon2).on('click', function() {  
    60.                 //7.响应删除和添加操作按钮事件  
    61.                 if($(this).html() == c.del) {  
    62.                     $(this).parents('.input-group').remove();  
    63.                 } else if($(this).html() == c.add) {  
    64.                     $(this).html(c.del);  
    65.                     addInputGroup(order+1);  
    66.                 }  
    67.                 //8.重新排序输入框组的序号  
    68.                 resort();  
    69.             });  
    70.   
    71.             inputGroup.append(inputGroupAddon1).append(widget).append(inputGroupAddon2);  
    72.   
    73.             _this.append(inputGroup);  
    74.   
    75.             if(order + 1 > c.data.length) {  
    76.                 return;  
    77.             }  
    78.             addBtn.trigger('click');  
    79.         }  
    80.   
    81.         function resort() {  
    82.             var child = _this.children();  
    83.             $.each(child, function(i) {  
    84.                 $(this).find(".input-group-addon").eq(0).html(' ' + (i + 1) + ' ');  
    85.             });  
    86.         }  
    87.     }  
    88. });  
    index-1.1.html
    [html] view plain copy
     
    1. <!DOCTYPE html>  
    2. <html lang="en">  
    3. <head>  
    4.     <meta charset="UTF-8">  
    5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">  
    6.     <meta name="viewport" content="width=device-width, initial-scale=1">  
    7.     <title>输入框组——改进版</title>  
    8.     <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">  
    9.   
    10.     <!--<link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />-->  
    11.     <!--[if lt IE 9]>  
    12.     <script src="js/html5shiv.js"></script>  
    13.     <script src="js/respond.min.js"></script>  
    14.     <![endif]-->  
    15. </head>  
    16. <body>  
    17.     <div class="container">  
    18.         <div class="input-group-add">  
    19.         </div>  
    20.     </div>  
    21.   
    22.     <script src="js/jquery-1.11.1.min.js"></script>  
    23.     <script src="js/bootstrap.min.js"></script>  
    24.     <script src="inputGroup-1.1.js"></script>  
    25.     <script>  
    26.         $(function() {  
    27.             $('.input-group-add').initInputGroup({  
    28.                 'widget' : 'input', //输入框组中间的空间类型  
    29.                 /*'add' : '添加',  
    30.                 'del' : '删除'*/  
    31.                 'field': 'data',  
    32.                 'data' : ['haha', 'hello', 'hi', 'dj']  
    33.             });  
    34.         });  
    35.     </script>  
    36. </body>  
    37. </html>  
           此时,在不设置 data 属性或data属性设置为空数组 [],将与原来显示结果无异。设置由于设置了field属性,所以此时输入框或文本框的name属性为field属性的值,如:
           如果没有设置 field 属性的话,默认为 inputData[] 或 textarea[] 对应设置 input 或 textarea控件。
           当设置了 data 属性后,并且 data 不为空数组时,初始化界面后如下:(设置要的数组将 放入 输入框组 中)
           同样能正常使用 “添加”和“输出”功能。
     
    https://blog.csdn.net/qq_15096707/article/details/51585758
  • 相关阅读:
    新一代MQ apache pulsar的架构与核心概念
    Flutter使用fluwx实现微信分享
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
    Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
    Codeforces 873E Awards For Contestants ST表
  • 原文地址:https://www.cnblogs.com/sjqq/p/9069367.html
Copyright © 2011-2022 走看看