bootstrap折叠调用collapse()后data-parent不生效的快速解决办法


Posted in Javascript onFebruary 23, 2017

今天做的项目,用到了bootstrap的折叠功能,这个功能需要只展开一个折叠框,点击一个就会自动隐藏另一个,初始按照API做了一下,发现一切运行正常,但是测试的同事提了一个bug,说切换到其他模块后再切换回来,发现原先展开的折叠框没有折叠起来--即恢复原样。于是又去修改代码,回来的时候对所有折叠框调用: .collapse('hide')方法。

$(".love .collapse").collapse('hide');

调用之后发现,点击连接苗,data-parent失效了,也就是可以同时展开多个折叠框

这严重脱离了需求,于是又去查了API并写了几个demo,发现了一个问题,只要在初始化的时候调用 .collapse()方法,就会出现这种同时展开多个折叠框的情况。但是奇怪的是:当页面渲染出来后,你去点击了折叠框后,这个时候再触发某个事件调用.collapse()方法,就不会出现这种同时展开多个的情况。

于是找到了两个解决的方法:

方法一:

在我的项目中,折叠框默认是折叠的,即没有.in类,基于以上的发现,于是改变源码:

$(".love .collapse.in").collapse('hide');

因为在bootstrap中折叠框的展开是由.in类修饰的,所以有.in类的必定是经过点击的,在初始化的时候

$(".love .collapse.in")

返回的必定是[]数组,因为默认是收起的。经过几个浏览器的测试,发现没有问题,问题解决了。

方法二:

在一个外国网站也发现了一个解决的方法,触发这种事件发生的原因是bootstrap的js的某个机制的实现问题,但是API没有给出这种事件的说明和处理方法,于是我们可以重写折叠框展开和收起的事件,首先在连接处加一个类.collapse-toggle,这个类可以随便指定.:

$(document).on('click', '.collapse-toggle', function(event) { 
    event.stopPropagation(); 
    var $this = $(this); 
    var parent = $this.data('parent'); 
    var actives = parent && $(parent).find('.collapse.in'); 
    // From bootstrap itself 
    if (actives && actives.length) { 
      hasData = actives.data('collapse'); 
      //if (hasData && hasData.transitioning) return; 
      actives.collapse('hide'); 
    } 
    var target = $this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''); //strip for ie7 
    $(target).collapse('toggle'); 
});​

这里用到了jQuery的data()方法,data()方法可以获取标签的data-*属性,我认为用在这里不是很好,主要是这个方法在IE6、IE7中不支持,要想完美兼容,可以使用attr()方法。

以上所述是小编给大家介绍的bootstrap折叠调用collapse()后data-parent不生效的快速解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
javascript读写json示例
Apr 11 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
Node.js 应用跑得更快 10 个技巧
Apr 03 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
详解使用WebPack搭建React开发环境
Aug 06 Javascript
js实现盒子拖拽动画效果
Aug 09 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 #Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 #Javascript
js获取浏览器和屏幕的各种宽度高度
Feb 22 #Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 #Javascript
高效的jQuery代码编写技巧总结
Feb 22 #Javascript
JS拉起或下载app的实现代码
Feb 22 #Javascript
js实现带简单弹性运动的导航条
Feb 22 #Javascript
You might like
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python如何实现定时器功能
2020/05/28 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
C语言基础笔试题
2013/04/27 面试题
师范学院毕业生求职信
2014/06/24 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
教师节横幅标语
2014/10/08 职场文书
党员检讨书
2014/10/13 职场文书
建国大业观后感600字
2015/06/01 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python