首页 > 其他分享 >基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版

基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版

时间:2022-11-28 19:00:27浏览次数:50  
标签:jQuery widget group field 输入框 添加 input 改进版 data


       上一次说到了 ​​基于Bootstrap使用jQuery实现输入框组input-group的添加与删除​​  ,初始状态下只有一个输入框组,可以通过点击输入框组的右侧“+”(或自定义的文字)可以在原输入框组的下面产生一个新的输入框组,通过点击输入框组的右侧“-”(或自定义的文字)可以删除当前输入框组。


        但是这样的输入框组还存在的许多不足之处,如问题一:我们在form表单中添加了这样一个输入框组,那么我们提交表单的时候怎么提交输入框输入的内容呢?(此时上回讲到的输入框组的输入框或文本域还未定义name属性)此外,问题二:那假如我希望初始的输入框组中输入框或文本域就有值肿么办?多个输入框组的内容呈现又如何呢?


针对这样的问题,对上一次自定义的输入框组插件进行了一定的修改。对于问题一,为插件添加 field 配置设置;对于问题二,为插件添加 data 配置设置(解决该问题,有点类似采用了递归的思想,当构建出一个输入框组后,通过触发该输入框组的添加功能(添加按钮的点击事件),在当前输入框组下面产生新的输入框组,同理,直到产生与 data 属性传入的数组长度为止,此时不再触发点击事件)


       修改如下:


inputGroup-1.1.js


/**
* Created by DreamBoy on 2016/6/4.
*/
/**
* Created by DreamBoy on 2016/4/29.
*/
$(function() {
$.fn.initInputGroup = function (options) {
//1.Settings 初始化设置
var c = $.extend({
widget: 'input',
add: "<span class=\"glyphicon glyphicon-plus\"></span>",
del: "<span class=\"glyphicon glyphicon-minus\"></span>",
field: '',
data: []
}, options);

var _this = $(this);

//添加序号为1的输入框组
addInputGroup(1);

/**
* 添加序号为order的输入框组
* @param order 输入框组的序号
* @param data 初始化输入框组中的数据
*/
function addInputGroup(order) {

//1.创建输入框组
var inputGroup = $("<div class='input-group' style='margin: 10px 0'></div>");
//2.输入框组的序号
var inputGroupAddon1 = $("<span class='input-group-addon'></span>");
//3.设置输入框组的序号
inputGroupAddon1.html(" " + order + " ");

//4.创建输入框组中的输入控件(input或textarea)
var widget = '', inputGroupAddon2;
if(c.widget == 'textarea') {
widget = $("<textarea class='form-control' style='resize: vertical;'></textarea>");
widget.html(c.data[order - 1]);
inputGroupAddon2 = $("<span class='input-group-addon'></span>");
} else if(c.widget == 'input') {
widget = $("<input class='form-control' type='text'/>");
widget.val(c.data[order - 1]);
inputGroupAddon2 = $("<span class='input-group-btn'></span>");
}

//5.设置表单提交时的字段名
if(c.field.length == 0) {
widget.prop('name', c.widget + 'Data[]');
} else {
widget.prop('name', c.field + '[]');
}


//6.创建输入框组中最后面的操作按钮
var addBtn = $("<button class='btn btn-default' type='button'>" + c.add + "</button>");
addBtn.appendTo(inputGroupAddon2).on('click', function() {
//7.响应删除和添加操作按钮事件
if($(this).html() == c.del) {
$(this).parents('.input-group').remove();
} else if($(this).html() == c.add) {
$(this).html(c.del);
addInputGroup(order+1);
}
//8.重新排序输入框组的序号
resort();
});

inputGroup.append(inputGroupAddon1).append(widget).append(inputGroupAddon2);

_this.append(inputGroup);

if(order + 1 > c.data.length) {
return;
}
addBtn.trigger('click');
}

function resort() {
var child = _this.children();
$.each(child, function(i) {
$(this).find(".input-group-addon").eq(0).html(' ' + (i + 1) + ' ');
});
}
}
});



index-1.1.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>输入框组——改进版</title>
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">

<!--<link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />-->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<script src="js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<div class="input-group-add">
</div>
</div>

<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="inputGroup-1.1.js"></script>
<script>
$(function() {
$('.input-group-add').initInputGroup({
'widget' : 'input', //输入框组中间的空间类型
/*'add' : '添加',
'del' : '删除'*/
'field': 'data',
'data' : ['haha', 'hello', 'hi', 'dj']
});
});
</script>
</body>
</html>


       此时,在不设置 data 属性或data属性设置为空数组 [],将与原来显示结果无异。设置由于设置了field属性,所以此时输入框或文本框的name属性为field属性的值,如:



基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版_input-group


       如果没有设置 field 属性的话,默认为 inputData[] 或 textarea[] 对应设置 input 或 textarea控件。


       当设置了 data 属性后,并且 data 不为空数组时,初始化界面后如下:(设置要的数组将 放入 输入框组 中)



基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版_bootstrap_02


       同样能正常使用 “添加”和“输出”功能。




标签:jQuery,widget,group,field,输入框,添加,input,改进版,data
From: https://blog.51cto.com/u_15894233/5893516

相关文章

  • jQuery插件FullCalendar日程表实现可扩展Google日历功能
    这个介绍jQuery日历FullCalendar插件是一个非常不错的日历工具,可用于制作日程表或计划安排等,可扩展Google日历功能,制作个性化的日程表,同时可绑定点击事件或拖动事件,使用非常......
  • MyEclipse6.0中使用aptana插件,添加jquery提示功能
    MyEclipse6.0中使用aptana插件,添加jquery提示功能第一:查看当前MyEclipse集成的eclipse的版本,,查看路径   D:/MyEclipse6.0/eclipse/readme/readme_eclipse.html(以我的......
  • jQuery 效果 - 隐藏和显示
    jQueryhide()和show()通过jQuery,您可以使用hide()和show()方法来隐藏和显示HTML元素:$("#hide").click(function(){$("p").hide();});$("#show").click(f......
  • 直播app源码,HTML + jQuery 实现轮播图
    直播app源码,HTML+jQuery实现轮播图一:HTML页面部分1、首先创建可视窗口添加6张图片,添加CSS样式 2、添加左右切换按钮,设置样式 3、添加图片导航器,设置样式,添加悬......
  • 第五章:jQuery基础
    jQuery简介"""jQuery内部封装了原生的js代码(还额外的添加了很多的功能)能够让你通过书写更少的代码完成js操作类似于Python的模块在前端模块不叫模块,叫“类库”兼......
  • jquery009-js执行的先后顺序
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><bodystyle="width:980px;margin:0auto"><h1>#一,当页面框架......
  • jquery011-自定义函数-执行
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><bodystyle="width:980px;margin:0auto"><h1>例子1</h1><......
  • jquery010-自定义-自执行-封闭
    一,jQuery扩展:-$.extend({函数名:function(){}})$.方法-$.fn.extend({函数名:function(){}})......
  • 利用jquery load 局部刷新数据
    <base><style>BODY{PADDING-RIGHT:0px;PADDING-LEFT:0px;PADDING-BOTTOM:0px;MARGIN:0px;PADDING-TOP:0px}</style>本文属于新手型的文章,也是新手写的文章,高......
  • jquery008-表单验证
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>form</title><style>.error{color:red;}.hide{......