如何跳过禁用选项卡的焦点

时间:2016-12-14 17:17:10

标签: html angularjs focus setfocus disabled-control

我有一个带有多个标签的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

1 个答案:

答案 0 :(得分:0)

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

  • 识别已禁用的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