2013-08-19 2 views
12

キーボードのTABキーをクリックすると、開いているすべてのアクティブなhrefリンクをナビゲートできます。それらのURLをJavaScriptで読むことは可能ですか?タブキーを操作するJavaScript

例:あなたがして、アクティブリンクに得ることができます

<!-- note that not all browsers focus on links when Tab is pressed --> 
<a href="http://example.com">Link</a> 

<input type="text" placeholder="Some input" /> 
<a href="http://example.com">Another Link</a> 

<textarea>...</textarea> 

::次のHTMLを持っ

function checkTabPress(key_val) { 
    if (event.keyCode == 9) { 
     // Here read the active selected link. 
    } 
} 
+2

'document.activeElement'を見て、現在フォーカスされている要素(存在する場合は' body')を取得します。あなたは '.nodeName.toUpperCase()===" a "'をチェックしてから '.href'プロパティを読むことができます – Ian

+0

この質問を見てください(テストしませんでした)。 http://stackoverflow.com/questions/11277989/how-to-get-the-focused-element-with-jquery –

+2

@Ian '.toLowerCase()'を意味しましたか? –

答えて

6

// event listener for keyup 
function checkTabPress(e) { 
    "use strict"; 
    // pick passed event or global event object if passed one is empty 
    e = e || event; 
    var activeElement; 
    if (e.keyCode == 9) { 
     // Here read the active selected link. 
     activeElement = document.activeElement; 
     // If HTML element is an anchor <a> 
     if (activeElement.tagName.toLowerCase() == 'a') 
      // get it's hyperlink 
      alert(activeElement.href); 
    } 
} 

var body = document.querySelector('body'); 
body.addEventListener('keyup', checkTabPress); 

がここworking exampleです。私はkeyUpイベントのためdocument要素にevent listenerを結合した

function checkTabPress(e) { 
    'use strict'; 
    var ele = document.activeElement; 

    if (e.keyCode === 9 && ele.nodeName.toLowerCase() === 'a') { 
     console.log(ele.href); 
    } 
} 

document.addEventListener('keyup', function (e) { 
    checkTabPress(e); 
}, false); 

に機能をトリガ:

<a href='https://facebook.com/'>Facebook</a> 
<a href='https://google.ca/'>Google</a> 
<input type='text' placeholder='an input box'> 

私たちは、このJavaScriptを使用することができます:HTMLコードのこの部分を考えると

+0

その例は機能していません... –

+0

@ rink.attendant.6私はそれが本当に確信しています。 [フルスクリーン結果](http://jsfiddle.net/kolkabes/esMQD/embedded/result/)を試してTabを数回押してください。 Shift-Tabも機能します。 – uKolka

+0

私の言葉を取り戻してください。私はすべてのブラウザにそうではありません。私はブラウザ間のコードを思いついてみましょう。 – uKolka

1

Tabキーが押された(または技術的にリリースされた)かどうかを確認します。

この関数は、currently focused elementをチェックし、NodeNameaであるかどうかをチェックします。そうであれば、ifブロックに入り、私の場合はhrefプロパティの値をJavaScriptコンソールに書き込みます。

は、ここでは、keyUpイベントでこれを行うことができるはずjsFiddle

+0

IE 9、Firefox、Chromeはすべて私のために働き、私の変数はすべて定義されています。 –

+1

なぜコールバック関数を別の役に立たないコールバックにラップするのですか? – uKolka

+0

私はパラメータを渡しているので。 –

8

です。具体的には、event.targetは選択した要素を指し、event.target.hrefはその要素のhref値を与えます。詳細については、mdnを参照してください。

次のコードはjQueryですが、定型コードとは別に、残りは純粋なjavascriptで同じです。これはすべてのリンクタグにバインドされているkeyupハンドラです。

$('a').on('keyup', function(e) { 
    if(e.which == 9) { 
     console.log(e.target.href); 
    } 
}); 

jsFiddle:http://jsfiddle.net/4PqUF/

+0

これは、タブキーが押された時点で選択された要素を指し、フォーカスされた新しい要素ではありません。 – zzzzBov

+1

keydownは、キーが何をする前であっても(そしてあなたがそれをやめることができます)、私が知っている限り(そしてIE8でテストできる限り)、keyupは新しい要素を指します。そのキーが何をしても後に発砲した。 – Sumurai8

+0

私はkeydownとしてそれを全然読んでいません。いい視点ね。 – zzzzBov

-6

あなたがウェブサイトのURLの正規表現 を使用する必要があることがある

VAR URLPATTERN = /(HTTP | FTP | HTTPS):// [\ wの - ] +(。[\ w - ] +)+([\ w。、@?^ =%&:/〜+# - ] * [\ w @?^ =%& /〜+# - ])?/

この式を例のように使用します。

var regex = new RegExp(urlPattern); var t = 'www.google.com';
var res = t。マッチ(正規表現/ g);あなたのため

変数tで、このJavaScriptに文字列としてウェブページを渡すと、配列

+0

これは質問に答えるには十分ではありません。 – juliocesar

0

一つだけの提案の代わりに、9あなたがKeyCodes.TABを使用することができますを取得する必要があります。

関連する問題