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 相关文章推荐
js 金额文本框实现代码
Feb 14 Javascript
JavaScript实现三阶幻方算法谜题解答
Dec 29 Javascript
JQuery复制DOM节点的方法
Jun 11 Javascript
AngularJS转换响应内容
Jan 27 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
基于vue实现分页效果
Nov 06 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 jQuery
仿照Element-ui实现一个简易的$message方法
Sep 14 Javascript
JavaScript 异步时序问题
Nov 20 Javascript
JavaScript继承的三种方法实例
May 12 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
PHP实现读取一个1G的文件大小
2013/08/24 PHP
PHP合并静态文件详解
2014/11/14 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
Python 爬虫多线程详解及实例代码
2016/10/08 Python
详解python中的文件与目录操作
2017/07/11 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
python爬虫请求头设置代码
2020/07/28 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
初中美术教学反思
2014/01/29 职场文书
走群众路线学习笔记
2014/11/06 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
公司地址变更通知
2015/04/25 职场文书
二年级数学教学反思
2016/02/16 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL