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 相关文章推荐
Prototype1.6 JS 官方下载地址
Nov 30 Javascript
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
Feb 16 Javascript
详谈AngularJs 控制器、数据绑定、作用域
Jul 09 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
Jan 30 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
React组件对子组件children进行加强的方法
Jun 23 Javascript
微信小程序实现简单文字跑马灯
May 26 Javascript
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
解析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脚本的10个技巧(5)
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
前端Electron新手入门教程详解
2019/06/21 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
《孔子游春》教学反思
2014/02/25 职场文书
家长写给老师的建议书
2014/03/13 职场文书
初三英语教学计划
2015/01/23 职场文书
公开致歉信
2019/06/24 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL