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 相关文章推荐
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 Javascript
niceTitle 基于jquery的超链接提示插件
May 31 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
js字符串转成JSON
Nov 07 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
javascript动态修改Li节点值的方法
Jan 20 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
JS实现碰撞检测的方法分析
Jan 19 Javascript
Angular PWA使用的Demo示例
Jan 31 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
python:动态路由的Flask程序代码
2019/11/22 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
python中setuptools的作用是什么
2020/06/19 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
有关爱国演讲稿
2014/05/07 职场文书
甜品店创业计划书
2014/09/21 职场文书
教师自查自纠材料
2014/10/14 职场文书
档案管理员岗位职责
2015/02/12 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书