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中Iframe之间传值的方法
Mar 11 Javascript
JS仿百度自动下拉框模糊匹配提示
Jul 25 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
JS常见内存泄漏及解决方案解析
May 30 Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP学习之正则表达式
2011/04/17 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
Python画图学习入门教程
2016/07/01 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
python2和python3哪个使用率高
2020/06/23 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
大学生入党思想汇报
2014/01/14 职场文书
规划编制实施方案
2014/03/15 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
爱情保证书大全
2014/04/29 职场文书
公司员工安全协议书
2014/11/21 职场文书
优秀护士事迹材料
2014/12/25 职场文书
中秋联欢会主持词
2015/07/04 职场文书
800字作文之大雪
2019/12/04 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
Python基础之元组与文件知识总结
2021/05/19 Python
详解python的异常捕获
2022/03/03 Python