現在<a>
、jQueryでタグを使用して、クリックイベントなどを開始しています。
例は <a href="#" class="someclass">Text</a>
しかし、「#」によってページがページの先頭にジャンプするのが嫌いです。代わりに何ができますか?
現在<a>
、jQueryでタグを使用して、クリックイベントなどを開始しています。
例は <a href="#" class="someclass">Text</a>
しかし、「#」によってページがページの先頭にジャンプするのが嫌いです。代わりに何ができますか?
回答:
jQueryでは、クリックイベントを処理するときに、 リンクが通常の方法で応答しないようにするには、falseを返しますhref
属性にアクセスするというデフォルトのアクションが行われないようにします(PoweRoyのコメントとErikの回答による):
$('a.someclass').click(function(e)
{
// Special stuff to do when this link is clicked...
// Cancel the default action
e.preventDefault();
});
$('a[href=#]').click(function(e) { e.preventDefault(); });
これは古いですが...誰かが検索でこれを見つけた場合に備えて。
"#/"
代わりに"#"
を使用すると、ページがジャンプしません。
/
これ#/
は、意味のある理由ではなく、という名前のアンカーに移動するため機能します。あなたは同じことをすることができます、#whateveryouwant
そしてそれはトップへのジャンプを防ぎます
#/
ん#whatever
。
次のように書くこともできます。
<a href="javascript:void(0);"></a>
私はそのより良い方法はわかりませんが、それは方法です:)
href='javascript:;'
が、それはIEでwindow.beforeUnloadイベントをトリガーするように注意してください
<a href="#!" class="someclass">Text</a>
javascript
)<a href="javascript:void(0);" class="someclass">Text</a>
jQuery
)<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
e.preventDefault();
});
</script>
event.preventDefault()
これを回避するために使用できます。詳細については、http://api.jquery.com/event.preventDefault/をご覧ください。
ただ、使用<input type="button" />
の代わりに、<a>
あなたが望むなら、それはリンクのように見えるようにスタイルにし、使用CSSを。
ボタンはクリック専用に作成されており、href属性を必要としません。
最善の方法は、onloadアクションを使用してボタンを作成し、javascriptを介して必要な場所に追加することです。そのため、javascriptを無効にしても、ボタンはまったく表示されず、ユーザーを混乱させません。
を使用href="#"
すると、同じ場所を指す多数の異なるリンクが表示されますが、エージェントがJavaScriptをサポートしていない場合は機能しません。
#
です。
アンカーを使用したい場合は、提案されている他の回答と同様にhttp://api.jquery.com/event.preventDefault/を使用できます。
スパンなどの他の要素を使用して、それにクリックイベントをアタッチすることもできます。
$("span.clickable").click(function(){
alert('Yeah I was clicked');
});
$('a[href="#"]').click(function(e) {e.preventDefault(); });
要素に意味のあるhref値がない場合、それは実際にはリンクではないので、代わりに他の要素を使用しないのはなぜですか?
Neothorによって提案されているように、スパンも同様に適切であり、正しくスタイル設定されていれば、クリック可能なアイテムとして目に見えて明白になります。ホバーイベントをアタッチして、ユーザーのマウスがその上に移動すると、要素が「ライトアップ」されるようにすることもできます。
ただし、これを述べたとしても、JavaScriptがなくても機能するようにサイトのデザインを再考したい場合がありますが、JavaScriptが利用可能な場合はJavaScriptによって拡張されます。
ほとんどの場合、href = "#"のリンクはボタン要素に置き換える必要があります。
<button class="someclass">Text</button>
これらのリンクはスクリーンリーダーに表示されるため、href = "#"でリンクを使用することもアクセシビリティの問題です。スクリーンリーダーは「リンク-テキスト」を読み上げますが、ユーザーがクリックするとどこにも移動しません。
hrefプロパティなしでアンカータグを渡すだけで、jQueryを使用して必要なアクションを実行できます。
<a class="foo">bar</a>
#
、これはあなたにとっては問題ではないと想定し、このソリューションを提供しました。
a:link
CSSセレクターはこのアンカータグをターゲットにしません。
の #/
トリックは動作しますが、ブラウザに履歴イベントを追加します。そのため、ユーザーが望む/期待する可能性があるため、戻るをクリックしても機能しません。
$('body').click('a[href="#"]', function(e) {e.preventDefault() });
これは、既存のコンテンツ、およびロード後にDOMに追加された要素に対して機能するため、私が行った方法です。
具体的には、.btn-group
(Reference)内のブートストラップドロップダウンメニューでこれを行う必要があるため、次のようにしました。
$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
このようにしてターゲットにされ、ページの他のものには影響を与えませんでした。
JavaScriptを使用せずにページがトップにジャンプしないようにするには、同様の4つの方法があります。
オプション1:
<a href="#0">Link</a>
オプション2:
<a href="#!">Link</a>
オプション3:
<a href="#/">Link</a>
オプション4(非推奨):
<a href="javascript:void(0);">Link</a>
ただしevent.preventDefault()
、jQueryでクリックイベントを渡す場合に使用することをお勧めします。
jqueryの処理後にfalseを返すこともできます。
例えば。
$(".clickableAnchor").live(
"click",
function(){
//your code
return false; //<- prevents redirect to href address
}
);
ページがジャンプしないようにするには、を呼び出したe.stopPropagation();
後にを呼び出す必要がありますe.preventDefault();
。
stopPropagation
イベントがDOMツリーを上ることを防ぎます。詳細はこちら:https : //api.jquery.com/event.stoppropagation/
ページをジャンプアップせずに同じページのアンカーセクションに移行する場合は、次のようにします。
「#」の代わりに「#/」を使用するだけです。
<a href="#/home">Home</a>
<a href="#/about">About</a>
<a href="#/contact">contact</a> page will not jump up on click..