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 图片缩放(按比例)控制代码
May 27 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
JS格式化数字保留两位小数点示例代码
Oct 15 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
移动端js图片查看器
Nov 17 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
May 12 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
node事件循环和process模块实例分析
Feb 14 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
Apr 06 Javascript
详解微信小程序动画Animation执行过程
Sep 23 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 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python输出各行命令详解
2018/02/01 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
基于opencv实现简单画板功能
2020/08/02 Python
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
大四学生毕业自荐信
2013/11/07 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
教师节倡议书2015
2015/04/27 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL