onclickが実行された場合、どうすればHREFを無効にできますか?


94

と属性の両方が 設定されたアンカーがHREFありONCLICKます。クリックしてJavascriptが有効になっている場合は、実行して無視するだけです。同様に、JavaScriptが無効またはサポートされていない場合は、URL をたどって無視します。以下は、JSを実行してリンクを同時にたどる(通常はJSが実行され、次にページが変更される)私がやっていることの例です。ONCLICKHREFHREFONCLICK

<A HREF="http://example.com/no-js-login" ONCLICK="yes_js_login()">Log in</A>

これを行うための最良の方法は何ですか?

私はJavaScriptの回答を期待していますが、特にPHPで実行できる場合は、それが機能する限り、どのような方法でも受け入れます。「a hrefリンクが実行され、JavaScriptのonclick関数が終了する前にページをリダイレクトする」を既に読んだがHREF、遅延するだけで、完全に無効化されていない。もっと簡単なものも探しています。


4
私は、hrefがあるアンカーとないアンカーに使用します。ページの読み込み時に、JavaScriptが有効になっているかどうかを確認します。正しいアンカーが表示されている場合は、それ以外を表示します。
ewein 2013年

1
@eweinなんで?これは、単純な機能のマークアップが非常に多いようです。
Supuhstar 2015

回答:


56

onclick属性の最初にreturnを配置すると、最初の未編集のソリューションを使用できます。

<a href="https://example.com/no-js-login" onclick="return yes_js_login();">Log in</a>

yes_js_login = function() {
     // Your code here
     return false;
}

例:https : //jsfiddle.net/FXkgV/289/


1
こんなにきれいなのが好きです!ただし、受け入れられたソリューションでは、HREFが無視されるかどうかについてより多くの制御が可能です
Supuhstar

過去数年間、私は考えを変えました。これはより良い解決策です
Supuhstar

なんて健康的!
DrunkDevKek

しかし、これはJSX反応では機能しません。これは機能しますか?
Coder

1
これは多くの時間を節約しました。
Mark Lozano

60
    yes_js_login = function() {
         // Your code here
         return false;
    }

falseを返すと、デフォルトのアクション(hrefに移動)が阻止されます。

編集:申し訳ありませんが動作しないようです、代わりに次の操作を行うことができます:

<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>

1
編集された回答は実際のリンクを削除するため、質問には回答しません。
Itai Bar-Haim

11
代わりに使用onclick="return yes_js_login();"してyes_js_login返すfalse
ウーヴェ・クライネ・ケーニッヒ

1
@cgogolin私の答えを見てください。
ゲイブローガン2017年

まだ行き詰まっている人のために、この行を追加するかもしれませんevent.stopImmediatePropagation()
didxga 2017

33

を使用してデフォルトのブラウザ動作を無効にし、HTML内でpreventDefaultを渡しeventます。

<a href=/foo onclick= yes_js_login(event)>Lorem ipsum</a>

yes_js_login = function(e) {
  e.preventDefault();
}

1
return falseはポリマーでは機能しませんでした...上記の解決策は機能しました...ありがとう
Paras Sachapara 2018年

16
<a href="http://www.google.com" class="ignore-click">Test</a>

jQueryを使って:

<script>
    $(".ignore-click").click(function(){
        return false;
    })
</script>

JavaScriptを使って

<script>
        for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) {
            document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) {
                event.preventDefault();
                return false;
            });
        }
</script>

.ignore-click好きなだけ要素にクラスを割り当て、それらの要素をクリックしても無視されます


これは素晴らしいソリューションです!クリックしたときに疑似クラス.btn-loadingがクリックされたリンクに追加されるボタンに使用しました。成功した場合、チェックマーク(エラーの場合はX)が読み込みアニメーションを置き換えます。場合によっては(ボタンが成功とエラーの両方で)再度クリックされることを望まないので、これを使用$(elemnent).addClass('disabled')して、エレガントな方法で探していた機能を簡単かつ簡単に実現できます。
マシューマシソン2018

14

次の簡単なコードを使用できます。

<a href="" onclick="return false;">add new action</a><br>

5

次のようなイベントパラメータを渡すと、より簡単です。

<a href="#" onclick="yes_js_login(event);">link</a>
function yes_js_login(e) {
    e.stopImmediatePropagation();
}

1
それは私にはうまくいきません。e.preventDefault()を使用する必要があります
Milan Simek

2

これは役立つかもしれません。 JQueryは不要

<a href="../some-relative-link/file" 
onclick="this.href = 'https://docs.google.com/viewer?url='+this.href; this.onclick = '';" 
target="_blank">

このコードは次のことを行います。相対リンクをGoogleドキュメントビューアに渡します。

  1. アンカーのフルリンクバージョンを取得する this.href
  2. リンクを新しいウィンドウで開きます。

だからあなたの場合これはうまくいくかもしれません:

<a href="../some-relative-link/file" 
onclick="this.href = 'javascript:'+console.log('something has stopped the link'); " 
target="_blank">

1

通常のURLまたはJavaScript呼び出しを代替的に処理する要素のテンプレートが必要な状況を解決しました。この場合、js関数は呼び出し元要素への参照を必要とします。JavaScriptでは、「this」は、ボタンなどのフォーム要素のコンテキストでのみ自己参照として機能します。ボタンは欲しくなかった。通常のリンクの外観だけだ。

例:

<a onclick="http://blahblah" href="http://blahblah" target="_blank">A regular link</a>
<a onclick="javascript:myFunc($(this));return false" href="javascript:myFunc($(this));"  target="_blank">javascript with self reference</a>

href属性とonClick属性は同じ値ですが、JavaScript呼び出しの場合は、onClickに「return false」を追加します。呼び出された関数で「falseを返す」ことは機能しませんでした。


なぜ2つあるのですか?なぜJSをに入れているのHREFですか?
Supuhstar 2014

Supuhstar、実際のコードは動的で、JavaScriptであり、外部で定義された数百のアイテムに対して<a>要素を生成します。各アイテムは、静的リンクアドレスを指定するか、生成された<a>要素が通常の「href動作」を使用する必要があるアドレスを指定します。または、アイテムにJavaScript関数呼び出しが指定されています。その場合、<a>要素の動作は、要素のコンテキストに基づいて計算されます。<a>ジェネレーターのコードでは、各要素に指定されているものをすべてコピーしたいと考えています。リンクアドレスであるか、JavaScript関数呼び出しであるかはテストしていません。
Bo Johanson 2014年

これが私の質問にどのように答えるかがわかりません。数百のリンクが欲しいと言ったのは誰ですか?私はこれすべての意味、またはあなたが言ったばかりの半分の意味さえ本当に理解していません。
Supuhstar 2014年

0

これは私のために働きました:

<a href="" onclick="return false;">Action</a>

回答ありがとうございます。StackExchangeへようこそ。残念ながら、これは新しい知識を追加するようには見えません。以前の回答がすでにこれを示唆しているようです。同意する場合は、賛成票を投じることをお勧めします。同意しない場合は、回答を編集して、新しい知識が明らかになるようにしてください。
Supuhstar 2017

0

私の場合、ユーザーが「a」要素をクリックしたときに条件がありました。状態は:

他のセクションに10を超える項目がある場合、ユーザーは他のページにリダイレクトされません。

他のセクションの項目が10未満の場合、ユーザーは他のページにリダイレクトされます。

「a」要素の機能は、他のコンポーネントによって異なります。クリックイベント内のコードは次のとおりです。

var elementsOtherSection = document.querySelectorAll("#vehicle-item").length;
if (elementsOtherSection> 10){
     return true;
}else{
     event.preventDefault();
     return false;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.