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 相关文章推荐
jquery自动将form表单封装成json的具体实现
Mar 17 Javascript
jquery 新建的元素事件绑定问题解决方案
Jun 12 Javascript
jQuery中:contains选择器用法实例
Dec 30 Javascript
jQuery的几个我们必须了解的特点
May 03 Javascript
JS中Location使用详解
May 12 Javascript
JavaScript File分段上传
Mar 10 Javascript
js中获取jsp表单中radio类型的值简单实例
Aug 15 Javascript
详解微信小程序 相对定位和绝对定位
May 11 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
Sep 08 Javascript
浅谈React深度编程之受控组件与非受控组件
Dec 26 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
解析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
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
深入浅析Python中的迭代器
2019/06/04 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
django使用graphql的实例
2020/09/02 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
公务员个人自我评价分享
2013/11/06 职场文书
服装创业计划书范文
2014/02/05 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
大学开学计划书
2014/04/30 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
廉政承诺书2015
2015/04/28 职场文书
军事理论课感想
2015/08/11 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书