【问题标题】:How to skip focus of disabled tabs如何跳过禁用标签的焦点
【发布时间】:2016-12-14 17:17:10
【问题描述】:

我有一个带有多个选项卡的 html 页面,可以根据 Angular 中的某些条件禁用其中一个或多个选项卡。 (至少其中一个将始终启用)

<tabset>
    <tab ng-disabled="vm.disableTab(1)">
    <tab ng-disabled="vm.disableTab(2)">
    <tab ng-disabled="vm.disableTab(3)">
</tabset>

当用户进入页面时,无论是否禁用第一个选项卡都会获得焦点。
我希望它最初关注/显示第一个未禁用的标签。我怎样才能做到这一点?

编辑:plnkr:http://plnkr.co/edit/NWQDPk3DgBUpLqA0vRPw?p=preview

【问题讨论】:

  • 需要用于 tabset 和 tab 指令的代码来理解这个问题的上下文,或者如果它是一个已知的库(例如 angular-ui)包括它的版本。 plnkr 是最好的。

标签: html angularjs focus setfocus disabled-control


【解决方案1】:

需要创建将执行以下活动的自定义指令,

  • 如果是第一个选项卡,则识别禁用的 TAB,然后删除其“活动”css
  • 从选项卡列表中迭代第二个活动选项卡,检查其是否禁用。
  • 如果第二个也被禁用然后移动到下一个...等等..
  • 如果发现第二个选项卡处于活动状态,则添加“活动”css 并触发点击相应的锚标记。这将在 UI 上显示其各自的 div 内容。

你的 JS 指令,

.directive('activeTabs', function($compile)

{

return {
    link: function(scope, el, attrs) {
        var tabs = el.find('li');
        setTimeout(function(){
            var activeTab = false;
            for (var i = 0; i < tabs.length; i++)
            {
                if (activeTab)
                    break;
                tab = tabs[i];
                if (!angular.element(tab).hasClass("disabled"))
                {
                    angular.element(tab).addClass('active');
                    tab.active = true;
                    activeTab = true;
                    var a = angular.element(tab).find('a')[0];
                    a.click();
                    break;
                }
                else
                {
                    tab.active = false;
                    angular.element(tab).removeClass('active');
                }
            }
        },10);
    }
}
});

您的 HTML 带有新指令,

<div ng-controller="test">
    <tabset active-tabs> <!--New directive is here-->
      <tab heading="One" disabled="isDisabled(1)">This should not be shown</tab>
      <tab heading="Two" disabled="isDisabled(2)">This should receive initial focus</tab>
      <tab heading="Three" disabled="isDisabled(3)">Three</tab>
    </tabset>
  </div>

更新Plunker

【讨论】:

  • 我希望有一些现有的功能,但这也有效。我认为您不应该关心 active 类,因为单击选项卡会自动更改它。我简化了你的Plunker,它仍然有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2013-11-12
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多