アンカータグが何も参照しないようにする方法は?


159

私はjQueryを使用していますが、一部のアンカータグで何も実行しないようにする必要があります。

私は通常、次のように書きます。

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

ただし、これはページの上部を指します!


jqueryがクリックイベントを処理するので、リンクをachorリンクのようにしたいが、JavaScript関数のように動作させたい
ahmed

効果的な
複製

1
以下の回答の1つで述べたように、リソースへのリンクを指定したくない場合は、A要素を使用しないでください。
Mathias Bynens、2009年

その中でhref属性atを使用しないでください。
vsync 2014年

回答:


103

何かをポイントしたくない場合は、おそらく<a>(アンカー)タグを使用しないでください。

リンクのように見えるものをリンクのように動作させたくない場合は、適切な要素(など<span>)を使用し、CSSを使用してスタイルを設定するのが最善です。

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

また、この質問に「jQuery」というタグを付けたとすると、クリックイベントハンドラーを添付することを想定しています。その場合は、上記と同じことを行い、次のJavaScriptのようなものを使用します。

$('#fake-link-1').click(function() {
    /* put your code here */
});

37
これには問題があります。タブナビゲーションが許可されていません。

6
(Iraimbilanjaが指摘しているように)ここでのスパンアプローチは、キーボードを使用して関数を呼び出す可能性を無効にすることに注意してください。これは、ユーザビリティの問題と考えます。
FredrikMörk、

3
アクセシビリティの問題も。ボタン要素を使用して解決できます(JavaScriptから生成されるため、JS以外のユーザーが壊れたコントロールを取得することはありません)。
クエンティン

4
そのための簡単な修正を次に示します。非リンク要素のtabindex = "0"は、ほとんどの最新のブラウザーでキーボードナビゲーションを有効にします。
Mathias Bynens、2009年

1
もう1つの「問題」は、CSS:hover擬似クラスがIE6のリンクではない要素で機能しないことです。しかし、とにかくJavaScriptを介してこれらの要素を追加しているため(少なくとも、そうする必要があります)、ホバーしたときに要素に.hoverクラスを追加するスクリプトを作成することもできます。
Mathias Bynens、2009年

268

完全ではないソリューションがいくつかあります。

1.偽のアンカーにリンクする

<a href="#">

問題:リンクをクリックするとページの上部に戻る

2.「a」以外のタグを使用する

スパンタグを使用し、jqueryを使用してクリックを処理する

問題:キーボードナビゲーションが壊れ、手動でホバーカーソルを変更する必要がある

3. JavaScriptのvoid関数へのリンク

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

問題:IEで画像をリンクすると壊れる

解決

これらすべてに問題があるため、私が解決した解決策は、偽のアンカーにリンクし、onClickメソッドからfalseを返すことです。

<a href="#" onClick="return false;">

最も簡潔なソリューションではありませんが、上記の方法のすべての問題を解決します。


2
私は通常javascript:void(0);を使用します。#を使用すると、現在のURLがマウスオーバー時にFirefoxのバーに表示されるため、ユーザーに誤解を与える可能性があります。
lucaferrario 2013

8
breaks when linking images in IEこれは何を意味するのでしょうか?
ユージーン2013

14
@eugeneこの質問は3歳になりましたが、IEはvoid関数へのリンクで囲まれると画像を非表示にしていました。いつ修正されたかはわかりませんが、IE10で動作します。私は今個人的に使用しています<a href="javascript:;">
zaius

1
私もそこでコメントを使用しました:<a href="javascript:void(0);//プロパティパレットを表示">。このように、ユーザーがホバーすると、コメントが表示されるので、クリックしたときに何が起こるかをヒントにすることができます。(ツールチップを使用することもできます。)
Robin Zimmermann

5
それhref="javascript:"も十分で、最新の主要なブラウザで動作するようです。セミコロンは必要ありません。実際、PhpStormはセミコロンを削除することを提案しています。
jlh 2017


36

これを処理する正しい方法は、リンクを処理するときにjQueryでリンクを「切断」することです。

HTML

<a href="#" id="theLink">My Link</a>

JS

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

これらの最後の2つの呼び出しは、ブラウザがクリックを解釈するのを停止します。


5
イベントのバブリングが停止するので、「適切」であるように聞こえますが、「return false」ははるかに冗長ではなく、同じことを行います。そうしたいのは、jQueryを介してリンクをクリックするようにイベントハンドラーが既に登録されている場合だけです。
aleemb 2009年

25

これを行うには多くの方法があります

追加およびhref属性付けしない

<a name="here"> Test <a>

あなたのようなhrefの代わりにonclickイベントを追加することができます

<a name="here" onclick="YourFunction()"> Test <a>

または、あなたはこのようなvoid関数を追加することができます

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

名前属性は必須ですか?
Petrus Theron 2017年

@PetrusTheron必要ありません。。
Punit Gajjar

これは既存の回答
のぼったくりです

1
href属性を削除する場合は、アンカータグのスタイルを設定することを忘れないでください。属性がハイパーリンクのように動作しなくなるため(onclickは引き続き機能します)cursor: pointer;:hoverセレクターなどをリセットする必要があります。
Partack

@Partack正解です。お知らせありがとうございます
Gajjar

24

無意味とはどういう意味ですか?

<a href='about:blank'>blank page</a>

または

<a href='whatever' onclick='return false;'>won't navigate</a>

1
同意
-jQuery

14

あなたは試すことができると思います

<a href="JavaScript:void(0)">link</a>

ここで私が目にする唯一の問題は、高レベルのブラウザセキュリティがJavaScriptの実行時にプロンプ​​トを表示する可能性があることです。

これはより簡単な方法の1つですが

<a href="#" onclick="return false;">Link</a>

これは慎重に使用する必要があります

いくつかのポインタについては、この記事をお読みくださいhttps://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void


正解、タブナビゲーションを許可します。
K-SOの毒性が高まっています。

14

この回答は、新しいWeb標準(HTML5)を反映するように更新する必要があります。

この:

<a tabindex="0">This represents a placeholder hyperlink</a>

...は有効なHTML5です。tabindex属性は、通常のハイパーリンクのようにキーボードでフォーカスできるようにします。span前述のように、この要素を使用することもできますが、この要素を使用するa方がエレガントです。

参照:https : //w3c.github.io/html-reference/a.html
およびhttps://html.spec.whatwg.org/multipage/links.html#attr-hyperlink-href


1
これも有効なHTML4ですが、アンカーをリンクとしてスタイル設定しません。
インタージェイ2013年

1
私はそれが有効なhtml4であることを知りませんでしたが、HTML5仕様はユースケースを明示的に述べています。そして、href属性をターゲットにしないスタイルは問題なく機能します。デフォルトのブラウザスタイルだけが問題になる可能性があります。
aross 2013年

1
これはclick、ユーザーが要素にフォーカスしてEnterキーを押したときにもイベントをトリガーしません(Firefox 51でテスト済み)。
torvin 2016年

@torvin、それは簡単です。keydownイベントを使用します。
aross

おしゃれな癖ですが、ウィンドウ10では、要素の周りに境界線付きのボックスが追加されます
1-14x0r


5

これは古い質問であることは知っていますが、とにかく2セント追加すると思います。

それはリンクが何をするかによって異なりますが、通常、たとえばボックスポップアップを少し作成している場合は、同じことを表示/実行している可能性のあるURLにリンクをポイントします。

<a id="about" href="/about">About</a>

次に、jQuery

$('#about').click(function(e) {
    $('#aboutbox').show();
    e.preventDefault();
});

このようにして、非常に古いブラウザー(またはJavaScriptが無効になっているブラウザー)は別のaboutページに移動できますが、さらに重要なことに、Googleはこれも取得して、aboutページのコンテンツをクロールします。


5

停止したいすべてのリンクhref="#!"(または本当に必要なもの)があることを確認してから、これを使用します。

jq('body').on('click.stop_link', 'a[href="#!"]',
function(event) {
     event.preventDefault();
});

4

属性aなしでHTMLアンカー(タグ)を持つことができhrefます。オフのままにhref属性を&それが何にもリンクしません。

<a>link</a>

ありがとうございました!それは私の場合には完璧に機能しました。URLがある場合に新しいタブでアンカータグを開きたいのですが、URLがない場合は何もしません。#の場合は、クリックを受け入れてページの上部に移動していました。あなたが示唆したようにhrefの部分はありません。問題は解決しました!タグが原因で書式設定が適切に表示されています。hrefがないため問題が発生していません。ありがとうございました!!!
Mohsin

1
他の誰かがHTML5が有効かどうかを考えている場合、答えはYESです:) stackoverflow.com/a/33046203/5323892 。これは、標準ページの例(3番目のli項目を参照)からの抜粋です。<nav> <ul> <li> <a href="https://stackoverflow.com/">ホーム</a> </ li> <li> <a href = "/ news ">ニュース</a> </ li> <li> <a>例</a> </ li> <li> <a href="https://stackoverflow.com/legal">法律</a> </ li> </ ul> </ nav>
Mohsin

動作しますが、マウスポインターを指に変更する場合は、@ Rutesh Makhijaniの回答で提案されているように、href = "JavaScript:void(0)"を追加するだけです。
Tarik

3

私のために働いた唯一のものは、上記の組み合わせでした:

最初にulのli

<li><a onclick="LoadTab2_1()" href="JavaScript:void(0)">All Assigned</a></li>

次に、LoadTab2_1で手動でタブdivを切り替えました

$("#tabs-2-1").hide();
    $("#tabs-2-2").show();

これは、を切断するとタブ内のアクションも切断されるためです

また、メインのタブで変更があった場合は、手動でタブのスタイルを設定する必要があります

$("#secTab1").addClass("ui-tabs-active").addClass("ui-state-active").addClass("ui-state-hover").addClass("ui-state-focus");
    $("#secTab1 a").css("color", "#ffffff");


1
<a href="#" onclick="SomeFunction()"  class="SomeClass">sth.</a>

これは私のアンカータグでした。したがって、onClick = ""イベントでfalseを返すのは、ここでは役に立ちません。href = "#"プロパティを削除したところ、以下のように機能しました

<a onclick="SomeFunction()"  class="SomeClass">sth.</a>

そして、私はこのCSSを追加する必要がありました。

.SomeClass
{
    cursor: pointer;
}

どういう意味ですか。何が推奨され、なぜですか?
Burk

javascriptとhtmlを別々のファイルに保存することをお勧めします。詳細な答えは次のとおりです。stackoverflow.com
Alexandru Severin

1

WordPressサイトでこの問題が発生しました。ドロップダウンメニューのヘッダーには常に属性がhref=""あり、使用されているヘッダープラグインは標準のURLのみを許可していました。最も簡単な解決策は、フッターでこのコードを実行することでした。

jQuery('[href=""]').click(function(e){
    e.preventDefault();
});

これは、空白のアンカーが何もしないようにします。


0

Reactはこのような関数をhref="javascript:void(0)"アンカータグで使用することをサポートしなくなりましたが、これはかなりうまくいくものです。

<a href="#" onClick={() => null} >link</a>

-1

これはjQueryの質問としてタグ付けされていることは知っていますが、AngularJSでもこれに答えることができます。

要素にng-clickディレクティブを追加し、クリックイベントである$ event変数を使用します...デフォルトの動作を防止します。

<a href="#" ng-click="$event.preventDefault()">

$ event変数を関数に渡すこともできます。

<a href="#" ng-click="doSomething($event)">

その関数では、クリックイベントで必要なことをすべて実行します。

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