JavaScriptでhrefリンクを無効にするにはどうすればよいですか?


106

タグが<a href="#"> Previous </a> 1 2 3 4 <a href="#"> Next </a>あり、状況によってはこのタグを完全に無効にしたい。

コメントからのコード(これはリンクが生成される方法です)

if (n_index != n_pages) 
    a = a+'<li><a href="#" onclick="javascript:paginateAjaxPage('+(n_index+1) +','+stype+');">></a></li><li><a href="#" onclick="javascript:paginateAjaxPage('+n_pages+','+stype+');" >>></a></li>'; 
else 
    a = a+'<li><a style="cursor: pointer;" onclick="return false;">></a></li><li><a style="cursor: pointer;" onclick="return false" >>></a></li>'; 
a = a+'</ul></div>';

状況によっては、このタグを完全に無効にする必要があります。これはどういう意味ですか?どんな条件?
Felix Kling

1
無効とは、テキストをリンク(下線とすべて)として表示したいが、クリックしても何もしないことを意味しますか?
シャドウウィザードはあなたのための耳です

回答:


189

ユーザーにクリックでリダイレクトさせたくない場合は、これを試してください

<a href="javascript: void(0)">I am a useless link</a>

54
いかが<a href='javascript:;'>I am a shorter useless link</a>ですか?
チャーリーシュリーサー2013年

16
セミコロンも必要ありません。
mVChr 2014

44
あなたのWeb開発者は、タブの何百万も入れ\t、改行\nコードだけが折り畳ま見るといいと、今7つのバイトを心配されている(誰?ブラウザ用)に、スペースをvoid(0)、および/または;神よ、。

3
上記のコメントには少し同意しません。時々、物事は説明的である必要があり、他の場合には覚えやすくする必要があります。私は「javascript:」を好むでしょう。
Lamy、2015

2
私の意見では- Millions millions of tabs\t, line feeds\n and spacesはい、これはコードを理解しやすくしますが、そうでvoid(0)はありません。このため、これを削除するか、できるだけ短くする必要があります。たとえば、ここでは短くなっています-「圧縮」やバイトエコノミーではなく理解(読み取り)のためのものです。:)
Cherry

71

このスタイルクラスを使用して、ページ内のすべてのリンクを非アクティブ化できます。

a {
    pointer-events:none;
}

もちろん、トリックは必要な場合にのみリンクを非アクティブ化することです。これを行う方法は次のとおりです。

次のように、空のAクラスを使用します。

a {}

次に、リンクを非アクティブにする場合は、次のようにします。

    GetStyleClass('a').pointerEvents = "none"

    function GetStyleClass(className)
    {
       for (var i=0; i< document.styleSheets.length; i++) {
          var styleSheet = document.styleSheets[i]

          var rules = styleSheet.cssRules || styleSheet.rules

          for (var j=0; j<rules.length; j++) {
             var rule = rules[j]

             if (rule.selectorText === className) {
                return(rule.style)
             }
          }
       }

       return 0
    }

注:一部のブラウザではCSSルール名が小文字に変換され、このコードでは大文字と小文字が区別されるため、これには小文字のクラス名を使用することをお勧めします

リンクを再アクティブ化するには:

GetStyleClass('a').pointerEvents = ""

ブラウザの互換性については、このページhttp://caniuse.com/pointer-eventsを確認してください

これが最善の方法だと思いますが、残念なことにIEはいつものようにそれを許可しません:)とにかくこれを投稿しています。これには役立つ情報が含まれていると考えられ、一部のプロジェクトは既知のブラウザを使用しているためです、モバイルデバイスでWebビューを使用しているときのように。

リンクを1つだけ無効にしたい場合(私はそれが問題であることに気付いただけです)、その条件に基づいて現在のページのURLを手動で設定するかどうかを手動で設定する関数を使用します。(あなたが受け入れた解決策のように)

この質問は思ったよりずっと簡単でした:)


3
pointer-events:none;私はそのタグを知らなかったので、感謝しなければなりません、とても重宝しました!
ジョナサンブラウン

3
これはすばらしいですが、バージョン11より前のIEではポインターイベントがサポートされていないことに注意してください。caniuse.com
#feat

2
このページでグローバルスタイルを編集して試してみましたが、
賛成

素晴らしかった!jqueryなしでこれを行う方法を見つけるのに苦労しました。
Hesam Khaki

私の場合、動的なリンクのhrefを変更する必要がないため、他のCSSよりもCSSの回答が優れているのが好きです。
ポール、

16

あなたは単にそれに空のハッシュを与えることができます:

anchor.href = "#";

または、それが「無効」に十分でない場合は、イベントハンドラーを使用します。

anchor.href = "javascript:void(0)";

21
#推奨されません、なぜですか?これを考慮してください。無効化されたリンクが長いページの下部/フッターに表示され、リンクをクリックすると上部に移動します。「javascript :;」十分です
Kumar

3
#1トップに戻ってスクロールしないだろう
Cétia

3
@Bixi、1後で追加される場合は、idの要素までスクロールします。
ps2goat 2014

ええ、それは明白です。決してid = 1を作成しないことを知っています。これは考えられる回避策です
セティア

現在のページとは異なる<base>がある場合、これは機能しません
Miguel Pynto 2018

8

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

$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});

5
anchor.href = null;


1
chromeは、この回答のためにnullという名前のページに移動しようとしています
OrangeKing89

5
(function ($) {
    $( window ).load(function() {
        $('.navbar a').unbind('click');
        $('.navbar a').click(function () {
            //DO SOMETHING
            return false;
        });
    });
})(jQuery);

この方法を実装する方が簡単だと思います。そして、それはあなたがjsであるという利点があります。あなたのhtmlの中ではなく、別のファイルにあります。アンバインドなしではないかと思います。どちらのイベントもまだアクティブです。わからない。しかし、ある意味では、この1つのイベントだけが必要です。


1
であるunbind必要?私は信じるreturn falseか、またはe.preventDefault()十分だろう。
Tasos K. 2014

OPのコードの何が間違っているのか、なぜこれがあなたの回答を編集して問題を解決するのかを説明してください。
Baum mit Augen


4

リンクを無効にする最も簡単な方法は、単にリンクを表示しないことです。条件が満たされているかどうかをテストして、[戻る]ボタンを非表示にする(if (true)条件に置き換える)場合は、常にこの関数を実行します。

var testHideNav = function() {
    var aTags = document.getElementsByTagName('a'),
        atl = aTags.length,
        i;

    for (i = 0; i < atl; i++) {
        if (aTags[i].innerText == "Previous") {
            if (true) { // your condition to disable previous
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        } else if (aTags[i].innerText == "Next") {
            if (false) { // your condition to disable next
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        }
    }
};

次にtestHideNav()、条件が変更されたかどうかを確認する必要があるときに実行します。


3

代わりに、スパンとJavaScript onclickを使用してください。一部のブラウザは、リンクと「#」hrefがある場合に「ジャンプ」します。


例を挙げていただけますか?一部のブラウザは「ジャンプ」は本当です.. :)
Arup Rakshit

よろしくお願いします、@ ArupRakshit =)受け入れられた回答はjavascript: void(0);orでそれを行いjavascript:;ます。Railsからレンダリングする場合は、無効にする代わりにスパンをレンダリングします。
Abdo

3

これも可能です:

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

関数が実行されることでリンクがどこにも行かない。


既存の回答を確認してください
ses

3

同様のニーズがありましたが、私の動機はリンクがダブルクリックされないようにすることでした。私はjQueryを使用してそれを達成しました:

$(document).ready(function() {
    $("#myLink").on('click', doSubmit);
});

var doSubmit = function() {
    $("#myLink").off('click');
    // do things here
};

HTMLは次のようになります。

<a href='javascript: void(0);' id="myLink">click here</a>

2

したがって、上記のソリューションではリンクが機能しなくなりますが、リンクが無効であることは表示されません(AFAICT)。一連のページがあり、現在のページを指すリンクを無効にしたい(そして無効にしたことを明らかにしたい)場合があります。

そう:

window.onload = function() {
    var topics = document.getElementsByClassName("topics");
    for (var i = topics.length-1; i > -1; i-- ) {
        for (var j = topics[i].childNodes.length-1; j > -1; j--) {
             if (topics[i].childNodes[j].nodeType == 1) {
                if (topics[i].childNodes[j].firstChild.attributes[0].nodeValue == this.n_root3) {
                    topics[i].childNodes[j].innerHTML = topics[i].childNodes[j].firstChild.innerHTML;
                }
            }
        }
    }
}

これはリンクのリストをウォークスルーし、現在のページを指すものを見つけ(n_root3はローカルなものである可能性がありますが、document同様のものを持っている必要があると思います)、リンクをリンクテキストのコンテンツに置き換えます。

HTH



0

このjquery用プラグインをインストールして使用する

http://plugins.jquery.com/project/jqueryenabledisable

ページのほとんどすべてのフィールドを無効/有効にすることができます。

ある条件でページを開きたい場合は、javaスクリプト関数を記述して、hrefから呼び出します。条件が満たされた場合はページを開き、それ以外の場合は何もしません。

コードは次のようになります。

<a href="javascript: openPage()" >Click here</a>

and function:
function openPage()
{
if(some conditon)
opener.document.location = "http://www.google.com";
}
}

リンクをdivに配置して、Style属性のdisplayプロパティをnoneに設定することもできます。これにより、divが非表示になります。たとえば、

<div id="divid" style="display:none">
<a href="Hiding Link" />
</div>

これによりリンクが非表示になります。ボタンまたは画像を使用して、onclickで次のようにこの関数を呼び出し、このdivを表示します。

<a href="Visible Link" onclick="showDiv()">

and write the js code as:

function showDiv(){
document.getElememtById("divid").style.display="block";
}

idタグをhtmlタグに置くこともできるので、

<a id="myATag" href="whatever"></a>

そして、あなたのJavaScriptでこのIDを使用して取得します

document.getElementById("myATag").value="#"; 

これの1つは確かに機能する必要があります


0

リンクを無効にする別の方法

element.removeAttribute('href');

hrefのないアンカータグは無効/プレーンテキストとして反応します

<a> w/o href </a>

の代わりに <a href="#"> with href </a>

jsFiddelを参照

これがたくさんあることを願っています。



-2

0)一部のブラウザは、リンクと「#」hrefがある場合に「ジャンプ」することを覚えておくとよいでしょう。したがって、最良の方法はカスタムJavaScriptです

1)カスタムJavaScriptの後の場合は、次のとおりです。

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

「return false」は、リンクが実際にたどられないようにします。

2)以下の使用避けてください。

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

または

  <a href="javascript:;" onclick="DoSomething();">Link</a>

一部のブラウザでは、JavaScript疑似プロトコルによりページが待機状態になり、予期しない結果が生じる可能性があるためです。IE6はそれで知られています。しかし、IE6を気にせず、すべてをテストしている場合、それは良い解決策になるかもしれません。

3)あなたが既に持っている場合jQuerybootstrap、プロジェクトで、あなたがそれらを使用してに見ることができますので、好きです。

$('.one-click').on("click", function (e) {
   $( this ).addClass('disabled');
});

ここで、.disabledクラスはブートストラップを形成します。

Qupteフォームブートストラップサイト(ここ

リンク機能に関する警告

.disabledクラスはpointer-events: noneのリンク機能を無効にするために使用しますが、そのCSSプロパティはまだ標準化されていません。さらに、ポインタイベントをサポートするブラウザでも、なし:キーボードナビゲーションは影響を受けません。つまり、目の見えるキーボードユーザーと支援技術のユーザーは、これらのリンクをアクティブにできます。安全のため、tabindex="-1"これらのリンクに属性を追加し(キーボードフォーカスを受け取らないようにする)、を使用custom JavaScriptしてそれらの機能を無効にします。

custom JavaScriptセクション1に示されていました


誰かが答えとしてそれを置く必要がありました、ブートストラップの人々は理由のためにそれをしました。たとえそれが悪い考えであっても、それはまだ答えであり、なぜその考えが悪いのかを説明すると、答えは人々に良い結果をもたらします。
Yevgeniy Afanasyev

回答の改善
Yevgeniy Afanasyev

-4

無効なリンクのコードの下:

<a href="javascript: void(0)">test disabled link</a> 

別の非常に単純な解決策は次のとおりです。

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

最初のソリューションは効率的です。


9
投稿する前に既存の回答を確認してください。これらのオプションはすでに提案されています... 2年以上前。応答が既存の応答よりも重要なものでない限り、古いスレッドを復活させないことをお勧めします。
リージュン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.