jQueryがリンクを無効にする


284

誰もが使用せずにjqueryのリンクを無効にする方法を知っていreturn false;ますか?

具体的には、私がやろうとしているのは、アイテムのリンクを無効にし、何かをトリガーするjqueryを使用してクリックし、そのリンクを再度有効にして、再度クリックするとデフォルトで機能するようにすることです。

ありがとう。デイブ

更新これ がコードです。.expandedクラスが適用された後に行う必要があるのは、無効にされたリンクを再度有効にすることです。

$('ul li').click(function(e) {
    e.preventDefault();
    $('ul').addClass('expanded');
    $('ul.expanded').fadeIn(300);
    //return false;
});

7
なぜ使用しないという要件はfalseを返すのですか?それを使用し、それが適用されなくなったらイベントハンドラーを削除します(または条件にそのハンドラーを入れて、言及された「いくつかのもの」のステータスに応じて異なる値を返します)。
クエンティン

同じクリックアクションでリンクをたどる前に、いくつかの前処理を実行しようとしていますか?つまり、2回のクリックを提案するのではなく、ユーザーがリンクをクリックすると、いくつかのアクションが発生し、リンクをたどりますか?
Lazarus

それ以外の場合は、問題空間の理解を深めることで回答が向上するため、このアプローチを採用する理由を説明できますか。
Lazarus

@lazarus、同じリンクを2回クリックすることを提案しています。1つ目は最初にいくつかのことを行い、次に2つ目はリンクをリンクとして扱います。
davebowker、2009年

@daviddorward、これまでのところ私はfalseを返そうとしましたが、それは私の目標の2番目の部分まで続きます。つまり、2回目のクリックが通過できないようにします。短い例を書くことができれば、私は最も感謝します。
davebowker

回答:


364
$('#myLink').click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});

これにより、指定したhrefにアクセスするというハイパーリンクのデフォルトの動作が妨げられます。

jQuery チュートリアルから:

クリックおよびその他のほとんどのイベントの場合、イベントハンドラーでevent.preventDefault()を呼び出すことにより、jquery.comへのリンクをたどって、デフォルトの動作を回避できます。

preventDefault()特定の条件が満たされている場合にのみ(たとえば、何かが非表示になっている場合)、クラスを展開してulの可視性をテストできます。表示されている(つまり、非表示になっていない)場合、ifステートメントが入力されないため、リンクは通常どおり起動するはずであり、デフォルトの動作は妨げられません。

$('ul li').click(function(e) {
    if($('ul.expanded').is(':hidden')) {
        e.preventDefault();
        $('ul').addClass('expanded');
        $('ul.expanded').fadeIn(300);
    } 
});

3
jQueryを使って1.7以上、あなたがオン/オフ使用することができます。stackoverflow.com/questions/209029/...
ランスクリーブランド

hrefとonclickがある場合、これは機能します$( "#myLink")。attr( 'onclick'、 '').click(function(e){e.preventDefault();});
ロナルドマクドナルド

ajaxとjqueryを介して実現したスクレイパーがこれらのリンクを取得しないようにするコールバックを持つhref購入を非表示にすることができます。素晴らしいです、ありがとう!
Cesar Bielich、2015

この投稿は、ブートストラップを使用する最も簡単な方法です。
Shaijut 2016年

107

これを試して:

$("a").removeAttr('href');

編集-

更新したコードから:

 var location= $('#link1').attr("href");
 $("#link1").removeAttr('href');
 $('ul').addClass('expanded');
 $('ul.expanded').fadeIn(300);
 $("#link1").attr("href", location);

3
onclickイベントを介してアクションを実行するリンクを無効にする高速な方法であるため、hrefでの再生は非常に便利です。とても賢い!
daitangio

実行時にブラウザがURI内に#を追加しないようにする甘い方法href="#"
Abela

65

私のようにグーグル経由でここに来た他の人のために-ここに別のアプローチがあります:

css:
.disabled {
  color: grey; // ...whatever
}

jQuery:
$('#myLink').click(function (e) {
  e.preventDefault();
  if ($(this).hasClass('disabled'))
    return false; // Do something else in here if required
  else
    window.location.href = $(this).attr('href');
});

// Elsewhere in your code
if (disabledCondition == true)
  $('#myLink').addClass('disabled')
else
  $('#myLink').removeClass('disabled')

覚えておいてください:これはcssクラスだけではありません

class = "buttonstyle"

しかし、これらの2つ

class = "buttonstyle disabled"

そのため、jQueryを使用してクラスを簡単に追加および削除できます。hrefに触れる必要はありません...

私はjQueryが大好きです!;-)


2
これは、リンクにターゲットがないことを前提としています:)
dstarh

2
この手の込んだことをすべて行う代わりに、domのonclickを高くするだけでなく、on()すべてのa.disabledリンクをフィルタリングしてデフォルトを防止するために使用してください。次に、無効にするクラスのオン/オフを切り替えるだけで、「有効」にするとリンクが自動的に処理されます。
CodeChimp 2014

「== true」の必要はありません-addClass( 'disabled')は関係なく実行されます。 if(disabledCondition)
Fox Wilson

1
@fwilson、あなたは完全に正しいですが、初心者プログラマーにとっては、で理解しやすくなり== trueます。:)
カルメニズム2014

単純化しない特別な理由はありif ($(this).hasClass('disabled')) { e.preventDefault(); }ますか?
Mir

58

以下は、私がその簡潔さと最小限のスクリプトで好む代替のcss / jQueryソリューションです。

css:

a.disabled {
  opacity: 0.5;
  pointer-events: none;
  cursor: default;
}

jQuery:

$('.disableAfterClick').click(function (e) {
   $(this).addClass('disabled');
});

7
Mozillaから:「警告:非SVG要素のCSSでのポインターイベントの使用は実験的です。この機能は、CSS3 UIドラフト仕様の一部でしたが、多くの未解決の問題により、CSS4に延期されました。」
デュエリンマーカー2012

1
これは良い考慮事項ですが、最近のほとんどのブラウザでうまく機能します。
Peter DeWeese 2012年

あなたは、連鎖検討する必要があります.prop("tabindex", "-1");addClass
オレグGrishko

19

次の方法でクリックしてリンクを削除できます。

$('#link-id').unbind('click');

次の方法でリンクを再度有効にできます。

$('#link-id').bind('click');

リンクに 'disabled'プロパティを使用することはできません。


1
他と比較して簡単にオンとオフを切り替えることができます。
python1981

2
「リンクに「無効」プロパティを使用することはできません。」なぜボタンと無効にするためのリンクの間に一貫性がないのだろうか。「無効」はリンクでも機能するはずです。シェビー車の場合、ブレーキペダルを踏んで停止する必要があると言いますが、この他の自動車メーカーでは、屋根にあるこのレバーを使用する必要があります。
eaglei22

14

あなたがhrefルートを行くなら、あなたはそれを保存することができます

無効にするには:

$('a').each(function(){
    $(this).data("href", $(this).attr("href")).removeAttr("href");
});

次に、以下を使用して再度有効にします。

$('a').each(function(){
    $(this).attr("href", $(this).data("href"));
});

あるケースでは、クリックイベントが既にどこか別の場所にバインドされていて、それを制御できなかったため、この方法で行う必要がありました。


12

私は常にリンクを無効にするためにjQueryでこれを使用します

$("form a").attr("disabled", "disabled");

を使用$("form a").attr("disabled", false);して再度有効にすることもできます
Alexander Ryhlitsky

9

HTMLリンクの例:

        <!-- boostrap button + fontawesome icon -->
        <a class="btn btn-primary" id="BT_Download" target="blank" href="DownloadDoc?Id=32">
        <i class="icon-file-text icon-large"></i>
        Download Document
        </a>

これをjQueryで使用してください

    $('#BT_Download').attr('disabled',true);

これをcssに追加します:

    a[disabled="disabled"] {
        pointer-events: none;
    }

1
これまでこのCSSプロパティに出くわしたことはありませんでしたが、これは、ハイパーリンクを無効にする最も簡単な方法です。そのすばらしいところは、pointer-events: noneプロパティを含むクラスをアンカー要素から削除すると、以前にクリックされたときの動作に戻ることです。したがって、基本的なハイパーリンクの場合は、href属性のURLに移動し、クリックイベントハンドラが設定されている場合は、再びアクティブになります。href値やクリックハンドラを保存するよりもはるかに簡単です。
フィリップストラトフォード

私はこのソリューションが好きです、それは最も簡単なものです。
ルイ

何もうまくいかなかった(そしてこのルートをほとんどあきらめた)少数の「解決策」から、これに至りました 宝石にたどり着きました。それは大した解決策ではありません。そして本当に働く唯一のもの。称賛。
user12379095

5

「チェックアウトしてアイテムを編集し、チェックアウト中に-ワイルドワイルドウエストクリックがどこにでも移動しないようにする」機能の私のお気に入り

$('a').click(function(e) {
    var = $(this).attr('disabled');
    if (var === 'disabled') {
        e.preventDefault();
    }
});

したがって、上記の「編集モード」で2番目のアクションツールバーのすべての外部リンクを無効にする場合は、編集機能を追加します

$('#actionToolbar .external').attr('disabled', true);

発砲後のリンクの例:

<a href="http://goo.gl" target="elsewhere" class="external" disabled="disabled">Google</a>

そして今、あなたはリンクに無効化されたプロパティを使用することができます

乾杯!


3

あなたはここで答えを見つけるはずです

このエレガントなソリューションを提供してくれた@Willと@Mattに感謝します。

jQuery('#path .to .your a').each(function(){
    var $t = jQuery(this);
    $t.after($t.text());
    $t.remove();
});


2

何かをトリガーし、いくつかのフラグを設定し、falseを返します。フラグが設定されている場合-何もしません。


クラスを設定してから、後でそのクラスを呼び出してもfalseが返され、リンクが呼び出されないようにして、それを試しました。
davebowker、2009年

1

unbind()で廃止されましたjQuery 3off()代わりにメソッドを使用してください:

$("a").off("click");

0

私はこれがjQueryにはないことを知っていますが、簡単なCSSでリンクを無効にすることができます:

a[disabled] {
  z-index: -1;
}

HTMLは次のようになります

<a disabled="disabled" href="/start">Take Survey</a>

0

これは、onclick属性がインラインで設定されているリンクで機能します。これにより、後で「return false」を削除して有効にすることもできます。

        //disable all links matching class
        $('.yourLinkClass').each(function(index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", "return false; " + OnClickValue);
        });

        //enable all edit links
        $('.yourLinkClass').each(function (index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", OnClickValue.replace("return false; ", ""));
        });

-2

だけを使用してください$("a").prop("disabled", true);。これにより、de link要素が実際に無効になります。する必要がありますprop("disabled", true)。使わないattr("disabled", true)

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