JsFiddle: http://jsfiddle.net/p5sZJ/10/
只在IE 10中复制Bug (chrome,firefox工作得非常好)。错误在IE9中不被复制,因为它不支持css转换。错误不是在IE 11和IE 11中复制,而是在IE10模式下工作。(请参阅我上一次编辑,此信息与此无关)
复制bug的步骤:
预期的结果:的崩塌,打开和关闭完全好。的实际结果:崩溃不起作用。
HTML:
<ul id="mainTab" class="nav nav-tabs">
<li><a href="#first" data-toggle="tab">First</a></li>
<li><a href="#second" data-toggle="tab">Second</a></li>
</ul>
<div id="mainTabContent" class="tab-content" ng-app="myApp" ng-controller="MyCtrl">
<div id="first" class="tab-pane">
<a id="anchor" ng-click="navigate()">Link to open accordion</a>
</div>
<div id="second" class="tab-pane">
<div id="second-accordion" class="accordion">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" href="#second-body">
Heading
</a>
</div>
<div id="second-body" class="accordion-body collapse">
<table class="table">
<thead>
<tr>
<th>Table Head</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a id="anchor-inner" href="#second-inner" data-toggle="collapse">
Inner link
</a>
</td>
</tr>
<tr class="collapse-row">
<td>
<div id="second-inner" class="collapse">
<div class="inner-description">
Description
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>Js:
var module = angular.module('myApp', []);
module.controller('MyCtrl', function($scope){
$scope.navigate = function(){
$('#mainTab li:eq(1) a').tab('show');
var inner = $('#second-inner');
if (!$(inner).parents('.collapse').hasClass('in')) {
$(inner).parents('.collapse').collapse('show');
}
if (!$(inner).hasClass('in')) {
$(inner).collapse('show');
}
};
});
$(document).ready(function(){
var collapse = $('.collapse');
collapse.on('hidden', function (event) {
$(event.target).children().hide();
});
collapse.on('show', function (event) {
$(event.target).children().show();
});
});似乎只有在使用AngularJs时才能复制该bug。(请参阅我上一次编辑,此信息与此无关)在IE10中没有引发“transitionend”事件,这就是为什么崩溃被卡住,但为什么没有引发。
编辑:
Bug是在没有AngularJS的情况下在所有浏览器中复制的。我在回答中增加了一些评论。您可以通过简单地单击选项卡(其中折叠了折叠元素),然后立即单击折叠头来展开,从而再现bug。试过几次老把戏。
发布于 2014-02-11 14:04:31
在setTimeOut 0中包装崩溃调用(“show”)在我的情况下是有效的。
http://jsfiddle.net/p5sZJ/12/
var module = angular.module('myApp', []);
module.controller('MyCtrl', function($scope){
$scope.navigate = function(){
$('#mainTab li:eq(1) a').tab('show');
var inner = $('#second-inner');
setTimeOut(function(){
if (!$(inner).parents('.collapse').hasClass('in')) {
$(inner).parents('.collapse').collapse('show');
}
if (!$(inner).hasClass('in')) {
$(inner).collapse('show');
}}, 0);
};
});
$(document).ready(function(){
var collapse = $('.collapse');
collapse.on('hidden', function (event) {
$(event.target).children().hide();
});
collapse.on('show', function (event) {
$(event.target).children().show();
});
});编辑:
我终于发现了问题的真正根源,以及为什么您应该设置超时来修复它。显然,当您发现折叠元素并在此之后立即与它们交互时,您应该非常小心,因为transitionEnd事件可能不会触发。您可以在这里找到详细信息:transitions。所以你最好把超时设置为20,而不是0。另外,如果用户在折叠时打开选项卡,然后立即单击折叠,它可能会在铬中达到盈亏平衡。
发布于 2014-02-12 14:19:03
尝试使用引导Ui http://angular-ui.github.io/bootstrap/,它的特殊库写来配合引导与角度。
https://stackoverflow.com/questions/21162313
复制相似问题