Bootstrap Modal的“上一步”,“下一步”切换功能的实现
2017-06-19 16:53
495 查看
1.功能分析
当我们注册用户信息的时候,系统会弹出一个模态框。如果需要填写的表单信息比较多,就会按照模块分步骤显示。当第一个模块填写完毕后,我们点击下一步,则下一个模块会覆盖当前模块,直到最后提交。同时,我们也可以返回上一步,重新填写。笔者针对代码的重用性和拓展性,实现了一个Bootstrap Modal分步填写表单的小插件,同时兼顾首页,尾页,中间页,单页等情况下的模块切换方式,代码尽力简化到最优。
2. Html示例代码
有关Bootstrap Modal的基本介绍可以参考Bootstrap 模态框(Modal)插件。本样例Html代码如下。<!-- 按钮触发模态框 --> <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> 弹出模态框 </button> <!-- 模态框(Modal) --> <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> × </button> <h4 class="modal-title" id="modalTitle"> 模态框标题 </h4> </div> <div class="modal-body"> <div><input></div> <div><input></div> </div> <div class="modal-footer"> <button type='button' class='btn btn-primary previous-page hidden'> 上一页 </button> <button type="button" class="btn btn-primary next-page"> 下一页 </button> <button type="button" class="btn btn-default" data-dismiss="modal"> 取消 </button> <label class="page-index" hidden>0</label> </div> </div><!-- /.modal-content --> </div><!-- /.modal --> </div>
其中,类名为“page-index”的lable为隐藏标签,表示当前表单模块所在的页码,初始值为0。
3.javascript代码实现
首先,定义了一个命为controlPageToggle的核心函数,用于控制步骤切换。/** * * @param modalSelect modal选择符,本例为“#myModal” * @param modalDataArray html代码字符串数组 * @param currentPageIndex 当前页码 * @param direction 1表示下一页方向,-1表示上一页方向 */ function controlPageToggle(modalSelect, modalDataArray, currentPageIndex, direction) { var arrayLength = modalDataArray.length; if (arrayLength <= 1) return; if (direction == 1) { //如果当前页是倒数第二页,则将下一页设置为尾页 if (currentPageIndex == arrayLength - 2) { $(modalSelect + " " + ".next-page").text("提交"); } //如果当前页是首页,添加上一页 if (currentPageIndex == 0 && arrayLength > 1) { $(modalSelect + " " + ".previous-page").removeClass("hidden"); } //更换modal-body和页码 $(modalSelect + " " + ".page-index").text((++currentPageIndex).toString()); $(modalSelect + " " + ".modal-body").html(modalDataArray[currentPageIndex]); } else { //如果当前页是尾页 if (currentPageIndex == arrayLength - 1) { $(modalSelect + " " + ".next-page").text("下一页"); } //如果当前页是正数第二页,则将上一页设置为首页 if (currentPageIndex == 1) { $(modalSelect + " " + ".previous-page").addClass("hidden"); } //更换modal-body和页码 $(modalSelect + " " + ".page-index").text((--currentPageIndex).toString()); $(modalSelect + " " + ".modal-body").html(modalDataArray[currentPageIndex]); } }
接下来,定义moadlDataControl,将Modal模态框进行初始化操作,包括指定Modal选择符,填充表单元素,绑定步骤切换事件等。
/** * * @param modalSelect modal选择符 * @param modalDataArray html代码字符串数组 * @param modalCallback modal回调函数 */ function moadlDataControl(modalSelect, modalDataArray, modalCallback) { //初始化模态框首页数据 $(modalSelect + " " + ".modal-body").html(modalDataArray[0]); if (modalDataArray.length <= 1) { $(modalSelect + " " + ".next-page").text("提交"); } //点击下一页 $(modalSelect + " " + ".next-page").click(function () { //调用回调函数 modalCallback(); if ($(this).text() == "提交") { $(modalSelect).modal('hide'); return; } //获取当前页码 var currentPageIndex = parseInt($(modalSelect + " " + ".page-index").text()); controlPageToggle(modalSelect, modalDataArray, currentPageIndex, 1); }); //点击上一页 $(modalSelect + " " + ".previous-page").click(function () { //获取当前页码 var currentPageIndex = parseInt($(modalSelect + " " + ".page-index").text()); controlPageToggle(modalSelect, modalDataArray, currentPageIndex, -1); }); //关闭模态框时,重置为首页 $(modalSelect).on('hidden.bs.modal', function () { $(modalSelect + " " + ".page-index").text((0).toString()); if (modalDataArray.length <= 1) { $(modalSelect + " " + ".next-page").text("提交"); } else { $(modalSelect + " " + ".next-page").text("下一页"); } $(modalSelect + " " + ".modal-body").html(modalDataArray[0]); $(modalSelect + " " + ".previous-page").addClass("hidden"); }) }
最后,我们可以根据自己的需求来定义回调函数modalCallback。该函数在每次点击“下一页”或者“提交”按钮时触发。如我们可以实现模块数据前端验证或提交表单数据到后台等功能,本例只是弹出文本。
function modalCallback() { alert("调用回调函数"); }
经过上述的封装,我们调用起来就非常方便了,示例如下。
$(function () { //定义模态框数据 var modalDataArray = new Array("<div><button>首页</button></div>", "<div><select></select></div>", "<div><input></div>", "<label>尾页</label>"); moadlDataControl("#myModal", modalDataArray, modalCallback); });
大家有什么不懂的请随时提问哦,需要源码的请把邮箱写一下,我传给你们,谢谢支持!!
相关文章推荐
- jquery-ui实现bootstrap的modal拖拽功能,弹窗头部拖拽
- 不用属性页方法实现 上一步 下一步 对话框功能
- Bootstrap的模态框modal插件实现点击协议链接弹出协议详情功能
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- C# WinForm下一步一步实现文件的拖入和拖出
- Winform中模仿实现上一步、下一步的导航页面
- Desktops + Vmware实现苹果OS的屏幕切换功能
- java根据properties配置文件来实现功能模块的动态切换
- jQuery实现无刷新切换主题皮肤功能
- 【Android2D游戏开发十六】(上文之触摸屏手势)详解Android Gesture 手势操作!利用手势实现一个简单切换图片的功能!
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- javascript实现四个重叠DIV切换功能
- 谈功能树切换的实现
- 实现同一个功能--背景切换
- 用expect实现su -c 自动切换用户功能
- JavaScript实现谷歌,百度切换搜索功能
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- VS.Net2005中使用本地化功能实现多语言的切换
- Android功能总结:仿照Launcher的Workspace实现左右滑动切换