首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引导折叠+ Tab导航中的几个问题

引导折叠+ Tab导航中的几个问题
EN

Stack Overflow用户
提问于 2014-01-16 12:50:53
回答 2查看 2.7K关注 0票数 1

JsFiddle: http://jsfiddle.net/p5sZJ/10/

只在IE 10中复制Bug (chrome,firefox工作得非常好)。错误在IE9中不被复制,因为它不支持css转换。错误不是在IE 11和IE 11中复制,而是在IE10模式下工作。(请参阅我上一次编辑,此信息与此无关)

复制bug的步骤:

  1. 点击“第二”选项卡。
  2. 点击“标题”崩溃。
  3. 通过点击“内部链接”打开内部崩溃。
  4. 再次单击“内部链接”关闭内部崩溃。
  5. 点击“第一”选项卡。
  6. 点击“链接打开手风琴”。
  7. 试着打开-关闭内部塌陷和主塌陷。

预期的结果:的崩塌,打开和关闭完全好。的实际结果:崩溃不起作用。

HTML:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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。试过几次老把戏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 14:04:31

在setTimeOut 0中包装崩溃调用(“show”)在我的情况下是有效的。

http://jsfiddle.net/p5sZJ/12/

代码语言:javascript
复制
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。另外,如果用户在折叠时打开选项卡,然后立即单击折叠,它可能会在铬中达到盈亏平衡。

票数 1
EN

Stack Overflow用户

发布于 2014-02-12 14:19:03

尝试使用引导Ui http://angular-ui.github.io/bootstrap/,它的特殊库写来配合引导与角度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21162313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档