2016-04-20 7 views
0

次のコードを使用して、#(ハッシュタグ)をURLに追加して、CSS :target属性を使用して作成されたライトボックスを閉じようとしています。このスクリプトは 'esc'キーのkeydownで実行されますが、example.com/#ではなくexample.com/#undefinedが返されます。なぜこのスクリプトは未定義ですか?

私はJSの初心者であることをお詫びしますが、#を返すように定義するにはどうすればよいですか?

$(document).on('keydown', function (e) { 
    if (e.keyCode === 27) { 
     var href = this.href; 
     window.location.hash = href; 
    } 
}); 

戻り値だけではなく##undefined

+1

を使用することができ、 'のvarのhref = e.target.hrefを試してみてください|| ''; '、'ハンドラでは、 'this'は' href'プロパティを持たないドキュメントオブジェクトを参照するため、 'this.href'は未定義を返します –

+0

' this'は 'href'プロパティを持たないまたは「this」が目標に達していません。デバッガにブラウザのコンソールパネルを使用する。 'console.log(this);'もしそれがundefinedを返すならば、私の推測では 'this'が問題です。 – NewToJS

+0

htmlサンプルは –

答えて

2

答えは、あなたのハンドラでthishrefプロパティ値を持たないdocumentオブジェクトを指します。したがって、href変数の値はundefinedであるため、ハッシュはundefinedとして更新されます。

今すぐ問題を解決するには、いつ、どのように

になどあなたが動作するように想定され、あなたがのhrefを取得したいHTMLは、のように見えているかのような質問には共有されない細部に依存しますターゲット要素、そしてあなたは

var href = e.target.href || ''; 

または

var href = $(e.target).closest('[href]').attr('href') || ''; 
+0

'var href'を更新した' var href = e.target.href | 'に置き換えてください''; 'コードはそれを完全に固定しました。 –

+0

@MattBeckmanあなたは 'var href = $(e.target).closest( '[href]')を使うのが良いです。attr( 'href')||例えば、アンカーは他の要素を含むことができる –

関連する問題