【问题标题】:"active" option doesn't change selected tab“活动”选项不会更改选定的选项卡
【发布时间】:2017-05-08 17:29:54
【问题描述】:

我正在使用 jQuery mobile(不是 jQuery UI)。我想做的是在不触发点击的情况下更改活动选项卡。

HTML

<div data-role="page" id="settingsPage">
    <div data-role="content">
        <div data-role="tabs" id="tabs">
            <div data-role="navbar">
                <ul>
                    <li><a id="tab0" href="#one" class="ui-btn-active">Tab One</a></li>
                    <li><a id="tab1" href="#two">Tab Two</a></li>
                    <li><a id="tab2" href="#three">Tab Three</a></li>
                </ul>
            </div>
            <div id="one" style="display: none" class="ui-body-d ui-content">Tab One content</div>
            <div id="two" style="display: none" class="ui-body-d ui-content">Tab Two content</div>
            <div id="three" style="display: none" class="ui-body-d ui-content">Tab Three content</div>
        </div>
    </div>

JS

var tabIndex = 0;

setInterval(function(){

  tabIndex++;
  if (tabIndex >= 3)
     tabIndex = 0;
  else if (tabIndex < 0)
     tabIndex = 2;

  $("#tabs").tabs( "option", "active", tabIndex );

}, 3000);

DEMO

发生的情况是选项卡内容正在切换,但活动选项卡没有。如何在不启动点击事件和尽可能利用 jQuery Mobile/UI 的情况下切换两者?

【问题讨论】:

  • 好的,所以现在确认活动选项卡选择是由 css 完成的,而不是由 option->active 完成的。谢谢奥马尔!
  • tabs 小部件从 jquery-ui 导入 jQM。 ui 不添加活动类,但 jQM 会。这可以像我向您展示的那样修复,或者您可以更改 jQM js 文件中的原始代码。编辑:您可以添加.focus() jsfiddle.net/Palestinian/aqbbw6zy/2
  • 那么另一种方法是在 html 标头中的 jQM 之后/之前导入 jquery-ui 脚本?
  • 无需添加jquery-ui;该小部件已包含在 jQM 中。 github.com/jquery/jquery-mobile/tree/master/external/jquery-ui/…

标签: javascript jquery jquery-mobile


【解决方案1】:

您可以在$("#tab" + tabIndex) 上使用addClass 和removeClass 作为ui-btn-active 类。在递增tabIndex 之前使用removeClass,在递增之后使用addClass。

这是jsfiddle。

更新

您可以使用 switch 语句,根据tabIndex 在选项卡中显示内容。在tabIndex 递增然后基于tabIndex 显示标签内容之前隐藏所有标签内容。

这是新的jsfiddle。

更新 2

感谢Omar,您可以在tabsactivate 事件中删除和添加 ui-btn-class。我已经用Omar has in the comments 更新了原始小提琴。这是最新的jsfiddle。

这是您需要添加到代码中的 tabsactivate 事件:

$("#tabs").on("tabsactivate", function(e, ui) {
  ui.oldTab.find("a").removeClass("ui-btn-active");
  ui.newTab.find("a").addClass("ui-btn-active").focus();
});

【讨论】:

  • 基本上 option->activate 不用于更改选项卡选择
  • 所以你想从你的代码中删除$("#tabs").tabs( "option", "active", tabIndex );?
  • 不,我希望它对我有用。但看起来它不会更改选项卡按钮本身,而只会更改选项卡内容。
  • 将此jsfiddle.net/Palestinian/aqbbw6zy/2 添加到您的答案中并获得一些代表。
  • 谢谢。我感谢奥马尔的帮助。你应该得到大部分的功劳!
【解决方案2】:

为什么不模拟点击呢?

$("#tab"+tabIndex).click();

而不是

$("#tabs").tabs( "option", "active", tabIndex );

【讨论】:

  • 因为我有另一个代码已经因为不同的原因触发了点击,我认为只需更改活动标签,我可以使用 option->active。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多