「#」リンクのクリックがページの先頭にジャンプしないようにするにはどうすればよいですか?


212

現在<a>、jQueryでタグを使用して、クリックイベントなどを開始しています。

例は <a href="#" class="someclass">Text</a>

しかし、「#」によってページがページの先頭にジャンプするのが嫌いです。代わりに何ができますか?



2
私はここでデビッド・ドーワードと一緒にいて、リンクされた重複する質問についてガルガンタウンです。あなたのウェブサイトにリンクがある場合、それらは通常のリンクとして機能する必要があります。JavaScriptがそれらをインターセプトして別の何かを実行する場合は、すべてが順調であり、実際のリンクが必要な場合、それが実際のページにつながります。これは、SEOやアクセシビリティなど、さまざまな理由で必要です。
Daniel Pryden、

「愚かなことは愚かなことです」私たちは以前にそこに行ったことがあります:)
takeshin

回答:


241

jQueryでは、クリックイベントを処理するときに、 リンクが通常の方法で応答しないようにするには、falseを返しますhref属性にアクセスするというデフォルトのアクションが行われないようにします(PoweRoyのコメントとErikの回答による):

$('a.someclass').click(function(e)
{
    // Special stuff to do when this link is clicked...

    // Cancel the default action
    e.preventDefault();
});

1
@pranay:OPは、jQueryを使用してこれらのリンクを操作していると明言しました。
BoltClock

8
falseを返す代わりに、event.preventDefault()を実行してください。これはあなたのコードを読む人々にとってより明確です。
RvdK 2010

@PoweRoy:わかりました。私は編集を行い、新しいことを学びました:)
BoltClock

5
@BoltClock OPは、アンカーの代わりにボタンを使用してクリックイベントを処理する必要があります。あなたの答えはかなり役に立ちますが、hrefがどこかにポイントしていて、現時点ではリダイレクトが必要ない場合です。まったく必要のないアクションのデフォルトの動作を防ぐことは、次のようなアドバイスです。ナイフを取り、刃をつかみ、ハンドルを使用して釘を打ちます:)作業に適したツールを使用してください!
takeshin

1
jqueryの場合:$('a[href=#]').click(function(e) { e.preventDefault(); });
Snufkin

298

これは古いですが...誰かが検索でこれを見つけた場合に備えて。

"#/"代わりに"#"を使用すると、ページがジャンプしません。


2
まさに私が必要とするもの!あなたのコメントの1年後でさえ、これは私にとって役に立ちました。クリスに感謝します
ザック

49
/これ#/は、意味のある理由ではなく、という名前のアンカーに移動するため機能します。あなたは同じことをすることができます、#whateveryouwantそしてそれはトップへのジャンプを防ぎます
スラング

3
これが最良の答えである必要があります。ありがとうございます
GilbertoSánchez16年

1
@slang、正しいですが、これはほんの一部ですが、「#/」はかなり一般的に使用されているため、意図を明らかにするため、「#whateveryouwant」の代わりに「#/」を使用することをお勧めします(クリーンコード)。しかし、それでも答えに追加することができます。
jobbert 2016年

22
注意してください-これはブラウザの履歴に記録を作成するので、リンクをクリックした後など、ユーザーがリンクをクリックしたときにユーザーが考えていることは実行されませ#/#whatever
ダレンスウィーニー2016

61

次のように書くこともできます。

<a href="javascript:void(0);"></a>

私はそのより良い方法はわかりませんが、それは方法です:)


この方法はHTML 4より前のバージョンでは問題ありませんでしたが、「新しいタブでリンクを開く」などの多くのナビゲーションアクションが中断されるため、今日では非常に不適切な方法です。
Steve-o

7
あなたは多分正しいですが...この場合、彼はonclickイベントを提供しているので問題ではないので、新しいタブでリンクを開くのはとにかく機能しません...
男のスカッラー

ショートカットはあるhref='javascript:;'が、それはIEでwindow.beforeUnloadイベントをトリガーするように注意してください
Mihir

これは彼自身の機能を壊すかもしれませんか?これを行うと、スライドをレンダリングするためのfuncがトリガーされなくなります。
user3806549

29

ソリューション#1:(プレーン)

<a href="#!" class="someclass">Text</a>

ソリューション#2:(必要javascript

<a href="javascript:void(0);" class="someclass">Text</a>

ソリューション#3:(必要jQuery

<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
    e.preventDefault();
});
</script>

3
最初のソリューションは完璧です。短く、きれいで、シンプル。これは受け入れられる答えになるはずです。ありがとう!
AlmostPitt 2018

1番は素晴らしいソリューションです。ありがとうございました!
ブレントンスコット


11

ただ、使用<input type="button" />の代わりに、<a>あなたが望むなら、それはリンクのように見えるようにスタイルにし、使用CSSを。

ボタンはクリック専用に作成されており、href属性を必要としません。

最善の方法は、onloadアクションを使用してボタンを作成し、javascriptを介して必要な場所に追加することです。そのため、javascriptを無効にしても、ボタンはまったく表示されず、ユーザーを混乱させません。

を使用href="#"すると、同じ場所を指す多数の異なるリンクが表示されますが、エージェントがJavaScriptをサポートしていない場合は機能しません。


1
@kingjeffreyしかし、何もしないことはそれでもナビゲートするよりはまし#です。
ロバート

8

アンカーを使用したい場合は、提案されている他の回答と同様にhttp://api.jquery.com/event.preventDefault/を使用できます。

スパンなどの他の要素を使用して、それにクリックイベントをアタッチすることもできます。

$("span.clickable").click(function(){
alert('Yeah I was clicked');
});

7

IDとしては許可されていないため#0、href を使用できます0。ページはジャンプしません。

<a href="#0" class="someclass">Text</a>

5
$('a[href="#"]').click(function(e) {e.preventDefault(); });

3
簡単な説明を追加していただけませんか?
JF Meier

「#」のhrefが関連付けられているアンカーにクリックハンドラーを追加しているように見えます。このように、すでに配置されているすべてのクリックハンドラーを検索して、その中にe.preventDefault()を追加する必要はありません。
Mani5556 2016

4

使うだけ

<a href="javascript:;" class="someclass">Text</a>

JQUERY

$('.someclass').click(function(e) { alert("action here"); }

4

要素に意味のあるhref値がない場合、それは実際にはリンクではないので、代わりに他の要素を使用しないのはなぜですか?

Neothorによって提案されているように、スパンも同様に適切であり、正しくスタイル設定されていれば、クリック可能なアイテムとして目に見えて明白になります。ホバーイベントをアタッチして、ユーザーのマウスがその上に移動すると、要素が「ライトアップ」されるようにすることもできます。

ただし、これを述べたとしても、JavaScriptがなくても機能するようにサイトのデザインを再考したい場合がありますが、JavaScriptが利用可能な場合はJavaScriptによって拡張されます。


4

ほとんどの場合、href = "#"のリンクはボタン要素に置き換える必要があります。

<button class="someclass">Text</button>

これらのリンクはスクリーンリーダーに表示されるため、href = "#"でリンクを使用することもアクセシビリティの問題です。スクリーンリーダーは「リンク-テキスト」を読み上げますが、ユーザーがクリックするとどこにも移動しません。


3

hrefプロパティなしでアンカータグを渡すだけで、jQueryを使用して必要なアクションを実行できます。

<a class="foo">bar</a>


ユーザーがjsを無効にしている場合のフォールバックアクションがないため、通常、このアプローチはお勧めしません。しかし、hrefがすでにに設定されていることを考えると#、これはあなたにとっては問題ではないと想定し、このソリューションを提供しました。
kingjeffrey 2010

1
a:linkCSSセレクターはこのアンカータグをターゲットにしません。
BoltClock

BoltClock、これは本当です。しかし、st4ck0v3rfl0wはそのような必要性を示していませんでした。
kingjeffrey 2010

その場合は<div>も使用できます。<a>を維持することのポイントは、通常の<a>ですでに定義されているスタイルを維持することだと思います。hrefがないと、他の<a>のように検出およびスタイル設定されません。
MarsAndBack


3

#/トリックは動作しますが、ブラウザに履歴イベントを追加します。そのため、ユーザーが望む/期待する可能性があるため、戻るをクリックしても機能しません。

$('body').click('a[href="#"]', function(e) {e.preventDefault() }); これは、既存のコンテンツ、およびロード後にDOMに追加された要素に対して機能するため、私が行った方法です。

具体的には、.btn-group(Reference)内のブートストラップドロップダウンメニューでこれを行う必要があるため、次のようにしました。

$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });

このようにしてターゲットにされ、ページの他のものには影響を与えませんでした。


3

私はいつも使ってきました:

<a href="#?">Some text</a>

ページジャンプを防止しようとするとき。これが最高かどうかはわかりませんが、何年もうまく機能しているようです。


3

JavaScriptを使用せずにページがトップにジャンプしないようにするには、同様の4つの方法があります。

オプション1:

<a href="#0">Link</a>

オプション2:

<a href="#!">Link</a>

オプション3:

<a href="#/">Link</a>

オプション4(非推奨):

<a href="javascript:void(0);">Link</a>

ただしevent.preventDefault()、jQueryでクリックイベントを渡す場合に使用することをお勧めします。


3
このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
A.スリマン

2

jqueryの処理後にfalseを返すこともできます。

例えば。

$(".clickableAnchor").live(
    "click",
    function(){
        //your code
        return false; //<- prevents redirect to href address
    }
);

1
それとliveメソッドはどちらも非推奨であり、今後は使用しないでください。
クエンティン


2

ページがジャンプしないようにするには、を呼び出したe.stopPropagation();後にを呼び出す必要がありますe.preventDefault();

stopPropagationイベントがDOMツリーを上ることを防ぎます。詳細はこちら:https : //api.jquery.com/event.stoppropagation/


私のHTMLに貼り付けることができる完全なコードを提供していただけませんか?Zurb Foundation 5.5.3を使用しています。
ジュリーS.

2

ページをジャンプアップせずに同じページのアンカーセクションに移行する場合は、次のようにします。

「#」の代わりに「#/」を使用するだけです。

<a href="#/home">Home</a>
<a href="#/about">About</a>
<a href="#/contact">contact</a> page will not jump up on click..

1

後に何かを追加する#と、そのIDを持つ要素にページのフォーカスが設定されます。最も簡単な解決策は、#/jQuery を使用している場合でも使用することです。ただし、jQueryでイベントを処理している場合event.preventDefault()は、次の方法です。


0

<a href="#!">Link</a><a href="#/">Link</a> 1回以上同じ入力をクリックしなければならない場合の仕事は...それだけで、複数の入力のそれぞれについて、1回のイベントクリックで取りません。

まだ行く最善の方法は <a href="#">Link</a>

その後、

event.preventDefault();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.