アンカーリンクをクリック不可または無効にするにはどうすればよいですか?


89

ユーザーがクリックしたときに無効にするアンカーリンクがあります。または、テキストの周囲からアンカータグを削除しますが、テキストは確実に保持してください。

<a href='' id='ThisLink'>some text</a>

ボタンを使用してこれを簡単に.attr("disabled", "disabled");
追加できます。無効化されたプロパティを正常に追加しましたが、リンクはまだクリック可能でした。
テキストに下線が引かれていてもいなくてもかまいません。

どんな手掛かり?

間違ったミュージシャンをクリックすると、「間違った」が追加され、クリックできなくなります。
クリックして正しい場合、「素晴らしい」が追加され、すべての<a>タグが無効になります。


hrefの部分を削除してCSSに追加します: "cursor:pointer"、$( '#ThisLink')。clickなどがあると思いますか?
Zeusの書

1
$( "#ThisLink")。parent()。find( "a")。remove();
Adam Holmes

アダム、このソリューションはほとんど機能します。ただし、タグ内のすべてのテキストが削除されます。
Evik James

回答:


12

私はあなたが何を求めているのかを理解しました(私は願っています)。これは醜い解決策です

var preventClick = false;

$('#ThisLink').click(function(e) {
    $(this)
       .css('cursor', 'default')
       .css('text-decoration', 'none')

    if (!preventClick) {
        $(this).html($(this).html() + ' lalala');
    }

    preventClick = true;

    return false;
});

これは実際に問題を実際に解決できるかもしれません... .clickの代わりに、本文で.onを使用し、「a [disabled]」に委任します。次に、同じセレクターを使用して、CSSコードを実際のCSSに配置します。次に、クリックの防止はevent.preventDefault()と同じくらい簡単で、falseを返します
lassombra

2
同意しない場合は、CSS「pointer-events:none;」を使用してください。代わりに、他のunswersと同じように。
vitrilo 2016年

200

最もクリーンな方法は、クリックを無効にする場合に、pointer-events:noneを含むクラスを追加することです。通常のラベルのように機能します。

.disableClick{
    pointer-events: none;
}

19
このアイデアをさらに簡単に使用するには、CSSのセレクターとしてa [disabled]を使用するので、.disableClickクラスをアンカーに追加する必要はありません
Ferran Salguero 2013年

15
ポインターイベントで無効にされたものにタブで移動できるので注意してください。なし
Mike Mellor

このソリューションは、最新のブラウザで私に適しています。クリックイベントにバインドされた使用可能なアンカータグがあり、プロセスがそれらの処理を実行するときにそれらをスパム送信しないようにするには、プログラムでこれを追加し、プロセスが完了したら削除します。私の場合、無効にされたアンカータグにタブ移動することも問題ではありませんが、他の問題である可能性があります。YMMV
Stephen Tetreault 2017

2
を使用pointer-events:noneするcursorと、、タイトルテキスト、その他のマウスオーバーイベントも無効になります。
キース

値noneは、マウスイベントに要素を「通過」し、代わりにその要素の「下」にあるものすべてをターゲットにするように指示します。 developer.mozilla.org/en-US/docs/Web/CSS/pointer-events 一部のレイアウトでは問題になる可能性があります
user2988142

33
<a href='javascript:void(0);'>some text</a>

8
この質問への今後の訪問者がそれが当面の問題をどのように解決するかを理解できるように、解決策を説明してください。
War10ck 2014

3
From:MDN:void演算子。ブラウザは、javascript: URIに続くと、URIのコードを評価し、戻り値がでない限り、ページのコンテンツを戻り値に置き換えますundefinedvoidオペレータは、返すために使用することができますundefined。例: <a href="javascript:void(0);"> Click here to do nothing </a> ただし、javascript:疑似プロトコルは、控えめなイベントハンドラーなどの他の代替手段よりも推奨されていません。
レーニン

28

ポインターイベント CSSスタイルを使用します。(ジェイソンマクドナルドが示唆したように)

MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-eventsを参照してください。ほとんどのブラウザでサポートされています。

アンカーに「無効」属性を追加するだけで、次のようなグローバルCSSルールがある場合に機能します。

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
クラスではなく[無効]属性を介してスタイルを追加する場合は+1。ポインタイベント:なし。IE11より古いものでは機能しません。
Daniel Tonon

すべてのIEには、アンカー、ボタン、その他の要素をデフォルトで無効にする独自のロジックがあります。この回避策は、IE以外のブラウザに必要です。
vitrilo

3
+1。次回はもう一度検索する必要がないので、必要なJavaScript(jQueryを使用)はになります$("#elementid").attr("disabled", "disabled");cursor: defaultCSS に含めると役立つ場合もあります(Muhammad Nasirの提案による)。
ASL

要素には無効化された属性がありません。それをセレクタとして使用しても機能しない場合があります。
RobG 2017

1
直感的-優れたソリューション。<a />要素に無効化された属性がないことに驚きました-奇妙に思えます。
Morvael


10

ブートストラップは.disabledクラスを提供します。是非ご利用ください。

ただし、.disabledクラスは、「a」タグにすでにクラス「btn」がある場合にのみ機能します。古い「a」タグでは機能しません。btnそれはスタイル的な意味合いを持っているように、クラスは、いくつかの状況では適切ではないかもしれません。内部では.disabledクラスがに設定さpointer-eventsれているためnone、CSSでSaroj AryalとVitriloが提案したのと同じことを実行できます。(このアドバイスをありがとう、レナイチンギル)。


3
.disabledクラスは、「a」タグにすでにクラス「btn」がある場合にのみ機能します。古い「a」タグでは機能しません。'btn'クラスは、スタイルに意味があるため、状況によっては適切でない場合があります。内部では、.disabledクラスがポインターイベントをnoneに設定しているため、CSSでSaroj AryalとVitriloが実行したのと同じことを実行できます。
Les Nightingill

詳しいコメントありがとうございます。それは多くのユーザーにとって多くを明らかにします。私の回答を拡張するために、コメントのテキストを使用できますか?
Yevgeniy Afanasyev 2017年


5

hrefアンカータグから属性を削除するだけです。


2
一部のブラウザでは、hrefを削除すると、hrefが/または現在のページに設定されます。
多項式

これが最初のアプローチであるべきだと思います
Bas Slagter

5

最善の方法は、デフォルトのアクションを防止することです。アンカータグの場合、デフォルトの動作はhref指定されたアドレスへのリダイレクトです。

したがって、次のjavascriptはこの状況で最適に機能します。

$('#ThisLink').click(function(e)
{
    e.preventDefault();
});

4

onclickイベントを使用して、クリックアクションを無効にすることができます。

<a href='' id='ThisLink' onclick='return false'>some text</a>

または、<a>タグ以外のものを使用することもできます。


これをtext-decoration: noneと組み合わせて、.disabledLink { color: #000 !important; }通常のテキストのように表示できます。
多項式2011年

1
邪魔なjavascriptはひどい解決策です。
jahrichie 2013

4

Jason MacDonaldのコメントは私にとってはうまくいき、Chrome、Mozila、IEでテストされました。

無効化の効果を示すために灰色が追加されました。

.disable_a_href{
    pointer-events: none;
    **color:#c0c0c0 !important;**
}

jqueryはアンカーリストの最初の要素のみを選択し、メタ文字(*)を追加して、idを持つすべての要素を選択して無効にしました#ThisLink

$("#ThisLink*").addClass("disable_a_href"); 

4

これを1行のjQueryコードで記述します。

$('.hyperlink').css('pointer-events','none');

CSSファイルに書き込みたい場合

.hyperlink{
    pointer-events: none;
}

3

スタイルシートに次のクラスを作成します。

  .ThisLink{
           pointer-events: none;
           cursor: default;
    }

このクラスを次のように動的にリンクに追加します。

 <a href='' id='elemID'>some text</a>

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>

これはJason MacDonaldの回答とどう違うのですか?
すべての労働者は必須


1

単にSASSで:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}

このコードは質問に答えることがありますが、なぜまたはどのように質問に答えるに関する追加のコンテキストを提供すると、その長期的な価値が大幅に向上します。回答を編集して説明を追加してください。
Toby Speight 2016年

1

これは、私が無効にするために使用した方法です。

$("#ThisLink").attr("href","javascript:;");

1
これはシンプルで簡単な解決策であり、受け入れられるべきです!
Si8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

これはこれを行う別の方法return falseです。リンクを無効にするのハンドラーが1回のクリック後に追加されます。


-4

最も簡単な方法

あなたのhtmlで:

<a id="foo" disabled="true">xxxxx<a>

あなたのjsで:

$('#foo').attr("disabled", false);

属性として使用すると、完全に機能します


3
disabledは<a>タグの有効な属性ではありません
Josepas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.