0

に、コントローラでこのjqueryのはうまく機能:HTMLは変換のjqueryのクリック機能のコンテンツへスキップする「アクセシビリティリンクについてはangularJSディレクティブ

<a href="#content" class="skip sr-only sr-only-focusable">Skip to content</a> 

ある

$scope.skipLink = $(document).ready(function() { 
    $(".skip").click(function(event){ 
     var skipTo="#"+this.href.split('#')[1]; 
    $(skipTo).attr('tabindex', -1).on('blur focusout', function() { 
     $(this).removeAttr('tabindex'); 
     }).focus(); 
    }); 
    }); 

方法はありますjqueryを使わずにこれをディレクティブに書き直すには?

+0

これは確かに角にやさしいと書かれているかもしれませんが、jQueryを使わずにこのようにしたい理由はわかりません。これは、それがなければ、むしろclunkyソリューションになります。 – mhodges

+0

@mhodges私は同意する、私はこれをより角に優しいものにするように求められ、私は多くの運がなかった。 jqLit​​eは問題ありません。コントローラ内のスコープではなく、少なくともこれをディレクティブにするのは良い考えですか? – gallagher

+0

はい、私は少しこれをきれいにする方法の例と答えを投稿することができます。私は尋ねなければならない、複数の「コンテンツにスキップする」リンクと、スキップすることができる複数のコンテンツセクションを持っていますか? – mhodges

答えて

1

私の意見では、これはjQueryを使わずに行うべきだとは思わない。しかし、もっと角度にやさしくするためには、THIS DEMOを参照してください。

考え方は、角度からのクリックハンドラディレクティブを活用して、jQueryをコントローラ内で動作させることです。

AngularJSコントローラ

$scope.skipToContent = function() { 
    $("#content").attr('tabindex', -1); 
    }; 
    $scope.removeTabIndex = function() { 
    $("#content").removeAttr('tabindex'); 
    }; 

HTML

<a href="#content" 
    ng-click="skipToContent()" 
    class="skip sr-only sr-only-focusable">Skip to content</a> 
<input id="content" 
     ng-blur="removeTabIndex()" 
     style="display: block; margin-top:100vh;"/> 
+0

ありがとう!好奇心の外に、指示の代わりにコントローラでなければならない理由はありますか? (あなたがわからないのであれば、私は新しいanglejsです) – gallagher

+0

@gallagher単なる孤立したケースであることを除いて、そうではありませんので、1回の使用のためのカスタムディレクティブを構築するのは少し残酷です。そしてあなたは指令を使用しています、FYI、それはng- *属性です。それらは角度ライブラリーからのあらかじめ定義された組み込みディレクティブです。 – mhodges

0

最も簡単な方法は、コンテンツのdivに属性tabindexを設定することで、まったくJavaScriptを使用しないことです。

<a href="#content" class="skip">Skip to content</a> 

<div id="content" tabindex="-1" onclick="return false"> 
    This is my content 
</div> 

それは非視覚障害(キーボードのユーザー、パーキンソン病、...)を持つ人々によって使用することができる「コンテンツにスキップ」リンクは、すべてのユーザーに対して非表示にするべきではないことに注意してください。

関連する問題