<a>タグのpreventDefault()


133

divリンクをクリックしたときに上下にスライドして表示または非表示にするHTMLとjQuery があります。

<ul class="product-info">
  <li>
    <a href="#">YOU CLICK THIS TO SHOW/HIDE</a>
    <div class="toggle">
      <p>CONTENT TO SHOW/HIDE</p>
    </div>
  </li>
</ul>
$('div.toggle').hide();
$('ul.product-info li a').click(function(event){
  $(this).next('div').slideToggle(200);
}

私の質問はpreventDefault()、リンクとして機能するリンクを停止し、URLの末尾に「#」を追加してページの上部にジャンプするにはどうすればよいですか?

正しい構文を理解できません。エラーメッセージが表示され続けます

preventDefault()は関数ではありません。

回答:



53

href属性を次のように設定しますhref="javascript:;"

<ul class="product-info">
  <li>
   <a href="javascript:;">YOU CLICK THIS TO SHOW/HIDE</a>
  <div class="toggle">
    <p>CONTENT TO SHOW/HIDE</p>
  </div>
 </li>
</ul>

アンカー用の素敵な宝石-ありがとう!これが機能する理由を誰かが説明できますか?
justinpage 2014年

8
hrefアンカータグ(a)の@KLVTZ 属性が空ではない可能性があります...しかし、これをに設定できjavascript:<code-here>ます。これは正当/有効です。次に<code-here>、セミコロンを追加して、空のステートメントだけを入力します。このようにリンクは何もしません。
Stijn de Witt

1
どうもありがとう!これにより、戻るボタンの機能(ページ全体のpushState()によって設定された状態を記憶)を、この$ this-> Html-> addCrumb( 'Sessions'、 'javascript:window.history.back();のようなCalePHPのパンくずリストに実装できました');
パトロノート

38

return false結果として次の3つのことが発生するため、を使用しないことをお勧めします。

  1. event.preventDefault();
  2. event.stopPropagation();
  3. コールバックの実行を停止し、呼び出されるとすぐに戻ります。

したがって、このタイプの状況では、実際には event.preventDefault();

記事のアーカイブ-jQueryイベント:停止(ミス)


13

または、クリックイベントからfalseを返すこともできます。

 $('div.toggle').hide();
 $('ul.product-info li a').click(function(event){
  $(this).next('div').slideToggle(200);
+ return false; 
 });

これにより、A-Hrefがトリガーされなくなります。

ただし、使いやすさの理由から、新しいタブでリンクを開きたい人のために、hrefがまだどこかに移動する理想的な世界では注意してください;)


1
ええ、私は質問の代わりにあなたの意図が何であると思ったかに答えていたと思います:)
Kent Fredric '05年

その価値については、何年も前に、hrefがトリガーされないように-1を返す必要があるとうたわれていました。私はそれがすべてのブラウザで機能するとは考えていません。ページがジャンプしないようにするには、「falseを返す」必要があります。
ランディ

12

これは私がテストしたばかりの非JQueryソリューションであり、機能します。

<html lang="en">
<head>
<script type="text/javascript">
addEventListener("load",function(){
    var links= document.getElementsByTagName("a");
    for (var i=0;i<links.length;i++){
        links[i].addEventListener("click",function(e){
        alert("NOPE!, I won't take you there haha");
        //prevent event action
        e.preventDefault();
        })
    }
}); 

</script>
</head>
<body>
<div>
<ul>
    <li><a href="http://www.google.com">Google</a></li>
    <li><a href="http://www.facebook.com">Facebook</a></li>
    <p id="p1">Paragraph</p>
</ul>
</div>
<p>By Jefrey Bulla</p>
</body>
</html>

12
<ul class="product-info">
  <li>
    <a href="javascript:void(0);">YOU CLICK THIS TO SHOW/HIDE</a>
      <div class="toggle">
        <p>CONTENT TO SHOW/HIDE</p>
      </div>
  </li>
</ul>

使用する

javascript:void(0);


@AhmadSharif今日FF 40.0.3とIE 11でテストしましたが、まだ作業があります。
HATCHA 2015

1
void(0)は、リンクをホバーしたときにそれを見ることができるユーザーにとって、醜く/混乱する可能性があると思います。実際に有効なJSを置くことができるので、それが何であるかを説明するコメントを付けたいと思います。例href="javascript:// Send Email"
colllin

11

まだ使ってJavaScriptでこれを実行する別の方法inline onclickIIFEeventpreventDefault()

<a href='#' onclick="(function(e){e.preventDefault();})(event)">Click Me</a>

こんにちは、または単に<a href='#' onclick="event.preventDefault()">Click Me</a>
ankabot

6

いくつかの操作の後、ページが最終的にリンクに移動する必要がある場合、以下を実行できます。

          jQuery("a").click(function(e){
            var self = jQuery(this);
            var href = self.attr('href');
            e.preventDefault();
            // needed operations

            window.location = href;
          });

1
なぜしpreventDefault、デフォルトのアクションを自分で行うのですか?追加する必要があることを実行するだけで、デフォルトが実行されます。
nathanvda 2015年

5

なぜCSSでそれをしないのですか?

アンカータグの 'href'属性を削除する

<ul class="product-info">
  <li>
    <a>YOU CLICK THIS TO SHOW/HIDE</a>
    <div class="toggle">
      <p>CONTENT TO SHOW/HIDE</p>
    </div>
  </li>
</ul>

あなたのCSSでは、

  a{
    cursor: pointer;
    }

1
このようにすると、不正なブラウザ(つまり、ファミリ)の:hover属性が失われます
Strae

4

イベントの伝播を停止しても問題がない場合は、

return false;

ハンドラの最後に。jQueryでは、デフォルトの動作を妨げ、イベントのバブリングを停止します。


4

return false;イベントの伝達を停止するためにイベント呼び出しから利用でき、それはevent.preventDefault();それを否定するように動作します。またはjavascript:void(0)、href属性を使用して、指定された式を評価してundefinedから要素に戻ることができます。

呼び出されたときにイベントを返す:

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

ボイドケース:

<a href="javascript:void(0);"> ... </a>

詳しくは、アンカータグのクリックイベントリスナーにhrefと 'return false'にvoid(0)を追加した場合の影響をご覧ください

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