如何使用 Tab 键激活引导选项卡内容

Posted

技术标签:

【中文标题】如何使用 Tab 键激活引导选项卡内容【英文标题】:How to Activate Bootstrap Tab Content with Tab Key 【发布时间】:2018-01-11 17:41:23 【问题描述】:

使用 Bootstrap 3 选项卡,用户可以按 Tab 键将焦点从导航选项卡 1 更改为导航选项卡 2,等等。但是,仅关注该导航选项卡不会导致选项卡内容发生更改。见例子http://getbootstrap.com/javascript/#tabs-examples

我们正在构建一个表单,其中每个导航选项卡中都有输入,然后在选项卡内容中为该输入提供说明。理想情况下,如果用户使用 Tab 按钮从一个输入导航到另一个输入,那么 Tab Content 会相应地改变。

我们需要做什么才能让 Tab Content 与通过导航的 Tabbing 一起改变?

谢谢!

这是我的导航代码:

<li role="presentation">
                                        <div class="row">


                                            <div class="col-xs-5 col-sm-4" style="padding:0px 5px;">
                                                <p class="sidep">Sternum Notch:</p>
                                            </div>

                                            <div class="col-xs-1 hidden-sm hidden-md hidden-lg" style="padding:0px 0px;">
                                                <a data-toggle="collapse" href="#collapseSternumNotch" aria-expanded="false" aria-controls="collapseSternumNotch" tabindex="-1">
                                                    <i class="fa fa-question-circle"></i>
                                                </a>
                                            </div>
                                            <div class="tablink">
                                            <a href="#section2" aria-controls="section2" role="tab" data-toggle="tab" tabindex="-1" aria-expanded="false">
                                            <div class="col-xs-6 col-sm-8" style="padding:0px 0px;">
                                                <input type="number" class="form-control" name="sternumNotch" placeholder="inches">
                                            </div>
                                            </a>
                                            </div>
                                        </div>


                                        <div class="collapse" id="collapseSternumNotch">
                                            <div class="well">
                                            <div class="embed-responsive embed-responsive-16by9">
                                                <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/pNSZt8AUiw4?rel=0" frameborder="0" allowfullscreen></iframe>
                                            </div>
                                                <h4>Sternum Notch</h4>
                                                <p>In your socks or bare feet, stand with your heels and buttocks against the wall and your feet 8" apart. Find the notch at the top of your ribcage/ bottom of your neck. Measure from the ground to the bottom of the sternum notch.</p>
                                            </div>
                                        </div>

                                    </li>

这是我的标签面板代码:

<div role="tabpanel" class="tab-pane" id="section2">
                <div class="row">
                  <div class="col-sm-12">
                    <div class="embed-responsive embed-responsive-16by9">
                      <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/pNSZt8AUiw4?rel=0" frameborder="0" allowfullscreen=""></iframe>
                    </div>
                    <br />
                    <h2>Sternum Notch</h2>
                    <p>In your socks or bare feet, stand with your heels and buttocks against the wall and your feet 8" apart. Find the notch at the top of your ribcage/ bottom of your neck. Measure from the ground to the bottom of the sternum notch.</p>
                  </div>

                </div>
              </div>

这是我的 jquery:

$(".tablink input").on("focus", function() 
$(".tablink").closest("a").attr("aria-expanded","true");
);
$(".tablink select").on("focus", function() 
$(".tablink").closest("a").attr("aria-expanded","true");
);

【问题讨论】:

如果我们假设你的索引键 = 1 它应该是 $('#myTabs li:eq(1) a').tab('show') 查看类似问题:***.com/questions/17713520/… 【参考方案1】:

这里有一个解决方案https://jsfiddle.net/vrka7w37/

$('.nav a:first').tab('show');

$('.nav a').click(function (e) 
  e.preventDefault()
  $(this).tab('show')
);
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div>

  <!-- Nav tabs -->
  <ul class="nav nav-tabs" role="tablist">
    <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li>
    <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a></li>
    <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a></li>
    <li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">Settings</a></li>
  </ul>

  <!-- Tab panes -->
  <div class="tab-content">
    <div role="tabpanel" class="tab-pane active" id="home">Home</div>
    <div role="tabpanel" class="tab-pane" id="profile">Profile</div>
    <div role="tabpanel" class="tab-pane" id="messages">Message</div>
    <div role="tabpanel" class="tab-pane" id="settings">Settings</div>
  </div>

</div>

Tab(键盘)将帮助您将焦点一个引导选项卡移动到另一个引导选项卡,一旦您点击使用Enter 会改变内容。

【讨论】:

谢谢...我怎样才能让它自动更改内容而无需按 Enter 键? @GregFielding 解决方案在这里 jsfiddle.net/vrka7w37/1 。更改选项卡将更改内容。抱歉回复晚了。【参考方案2】:

我不确切知道您的标记是什么样的,但我很确定您可以将focus 事件附加到您的输入。这是引导示例的修改副本,可以提供一个想法:

<ul class="nav nav-tabs" role="tablist">
    <li role="presentation" class="active">
        <a href="#home" aria-controls="home" role="tab" data-toggle="tab">
            <input type="text" class="tabInput" />
        </a>
    </li>
    <li role="presentation">
        <a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">
            <input type="text" class="tabInput" />
        </a>
    </li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
    <div role="tabpanel" class="tab-pane active" id="home">...</div>
    <div role="tabpanel" class="tab-pane" id="profile">...</div>
</div>

然后用jquery附加一个事件监听器:

$('input.tabInput').on('focus', function(event) 
    $(ev.target).closest('a').tab('show');
);

这可能与您当前的标记略有不同,但我敢肯定,如果您在按下 tab 键时在选项卡中输入焦点,您可以调整这个想法以适应您的情况。

【讨论】:

以上是关于如何使用 Tab 键激活引导选项卡内容的主要内容,如果未能解决你的问题,请参考以下文章

如何从引导程序中的另一个页面激活动态选项卡?

引导选项卡内容 slideDown/slideUp 不起作用

引导选项卡内容不起作用

bootstrap-vue 选项卡 - 在 url 中给定锚点打开选项卡内容

选项卡内容布局显示在其他选项卡中

点击选项卡内容切换代码