jquery.bootstrap.wizard 动态添加li后渲染问题
来源:互联网 发布:霍尼韦尔监控软件下载 编辑:程序博客网 时间:2024/06/09 09:07
jquery.bootstrap.wizard 动态添加li后渲染问题
最近在使用jquery.bootstrap.wizard,由于应用场景需要以及代码复用考虑,向导步数根据新增实体类型,动态生成,这两天一直被生成后如何重新渲染的问题困扰,搜索未果,记得之前也有人问同样问题,但是找不到网址了,所以在这里写下我的第一份博客分享下我的解决过程:
核心代码
- 前台代码
<form role="form" id="entityWizard" class="form-wizard validate"> <ul class="tabs" id="entityWizardTabs"> <li class="active"> <a href="#entityTypeStep" data-toggle="tab"> <@spring.message "entityTypeSelect"/> <span>1</span> </a> </li> <li> <a href="#basicAttributeStep" data-toggle="tab"> <@spring.message "basicAttribute"/> <span>2</span> </a> </li> </ul> <div class="progress-indicator"> <span></span> </div> <div class="tab-content no-margin" id='entitywizardContent'> <!-- Tabs Content --> <div class="tab-pane with-bg active" id="entityTypeStep"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="control-label" for="entityTypeSelect"><@spring.message "pleaseSelectEntityType"/></label> <select multiple="" size=10 class="form-control" name="entityTypeSelect" id="entityTypeSelect" data-validate="required"> </select> </div> </div> </div> </div> <div class="tab-pane with-bg" id="basicAttributeStep"> <div class="row" id='attributeDiv'> </div> </div> <div class="tab-pane with-bg" id="customizeStep"> </div> <!-- Tabs Pager --> <ul class="pager wizard"> <li class="previous"> <a href="#"><i class="fa fa-arrow-circle-left"></i> <@spring.message "previous"/></a> </li> <li class="next"> <a href="#"><@spring.message "next"/> <i class="fa fa-arrow-circle-right"></i></a> </li> <li class="finish" id="submit"> <a href="#"><@spring.message "finish"/> <i class="fa fa-check-circle"></i></a> </li> </ul> </div> </form>
前两步是固定的,第一步选择实体类型,第二步动态加载实体属性,后面的为动态步骤,维护一些关联关系之类的。
- js脚本
初始化
function initWizard(){ var $this = $('#entityWizard'), $tabs = $this.find('> .tabs > li'), $progress = $this.find(".progress-indicator"), _index = $this.find('> ul > li.active').index(); // Validation var checkFormWizardValidaion = function(tab, navigation, index){ if($this.hasClass('validate')){ var $valid = $this.valid(); if( ! $valid){ $this.data('validator').focusInvalid(); return false; } } return true; }; // Setup Progress if(_index > 0){ $progress.css({width: _index/$tabs.length * 100 + '%'}); $tabs.removeClass('completed').slice(0, _index).addClass('completed'); } $this.bootstrapWizard({ tabClass: "", onTabShow: function($tab, $navigation, index){ var tabss = $tab.parent().find('> li'); var pct = tabss.eq(index).position().left / tabss.parent().width() * 100; tabss.removeClass('completed').slice(0, index).addClass('completed'); $progress.css({width: pct + '%'}); if(index === 1){//约定把属性界面放到第二步 if(tempEntityTypeId != entityTypeId){ initAttributes(); tempEntityTypeId = entityTypeId; } } }, onNext: checkFormWizardValidaion, onTabClick: checkFormWizardValidaion, onFinish: function(){ …………………… }); } } } }); $this.data('bootstrapWizard').show( _index ); $this.find('.pager a').on('click', function(ev) { ev.preventDefault(); });
我第一步是个select选择框,根据选择不同的类型,去动态生成不同的li 和div加入到最初的wizard中。
$('#entityTypeSelect').change(function(event) { //清空自定义step $('[flag="customize"]').remove(); if(………………){ var rSiteLi = $('<li class="" flag="customize"></li>'); var rSiteA = $('<a href="#rSiteStep" data-toggle="tab">'); rSiteA.append($.i18n.prop('bindCodeLocationSite')); var rSiteSpan = $('<span></span>'); rSiteSpan.append(3); rSiteA.append(rSiteSpan); rSiteLi.append(rSiteA); $('#entityWizardTabs').append(rSiteLi); var rSiteDiv = $('<div class="tab-pane with-bg" id="rSiteStep" flag="customize">'); $('#basicAttributeStep').after(rSiteDiv); } $('#entityWizard').data('bootstrapWizard').resetWizard(); });
加载后执行
$('#entityWizard').data('bootstrapWizard').resetWizard();
就可以重置wizard。
一开始以为重新调用initWizard即可,看源码发现源码中
if (element.data('bootstrapWizard')) return;就直接return了
,initWizard并不起作用,甚至试着直接remove掉,重新initWizard
$('#entityWizard').removeData('bootstrapWizard');
但是这样的话,下一步和上一步的click事件应该会注册两次,所以在第一页点击下一步的时候,会直接跳到第三页。
另外在解决问题的过程中还遇到一个大坑,原本我是在onShow中去动态添加li的,这样就形成了死循环,请谨慎。
希望对大家有帮助吧。
0 0
- jquery.bootstrap.wizard 动态添加li后渲染问题
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jquery 动态为ul添加li
- bootstrap 动态添加modal,隐藏后背景仍然残留的问题 bootstrap-modal-backdrop-remaining
- jQuery中li的前添加和后追加
- 动态添加删除li
- Bootstrap JQuery wizard steps流程插件
- JQUERY 动态删除LI
- JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案
- javaScript动态添加Li元素
- jQuery动态添加li标签并添加属性和绑定事件
- jQuery动态添加li标签并添加属性和绑定事件
- Jquery动态插入li元素
- Jquery mobile为select动态添加option后,无法正常显示的问题
- 解决 easyui 动态添加控件时无法渲染的问题
- 【IMWeb训练营作业】-Todo List
- Unity3D 从入门到放弃 ——巡逻兵 观察者模式
- ArcSDE10.1+Oracle数据库环境配置教程(1)
- hihocoder 1284
- 【IMWeb训练营作业】vue.js
- jquery.bootstrap.wizard 动态添加li后渲染问题
- Go语言文件操作
- 青蛙过河 (sdut oj)
- Excel 正则表达式提取值
- Linux学习<二> 十三单元
- C++的静态函数
- Java代码bi邮箱验证,找回密码
- Android之路——开发环境变更:WIN10、AndroidStudio
- Spring Mvc 3.1 之后如何配置messageConverters