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 相关文章推荐
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
js禁止小键盘输入数字功能代码
Aug 01 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
Javascript的表单与验证-非空验证
Mar 18 Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 Javascript
javascript常用经典算法详解
Jan 11 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
原生JS实现 MUI导航栏透明渐变效果
Nov 07 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
浅谈react useEffect闭包的坑
Jun 08 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伪静态之APACHE篇
2014/06/02 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
javascript 写类方式之六
2009/07/05 Javascript
js数组的操作详解
2013/03/27 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
python 基于wx实现音乐播放
2020/11/24 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
酒店值班经理的工作职责范本
2014/02/18 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
自荐信模板大全
2015/03/27 职场文书
大学感恩节活动总结
2015/05/05 职场文书
《实心球》教学反思
2016/02/23 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
Golang gRPC HTTP协议转换示例
2022/06/16 Golang