13

e.preventDefault();デフォルトのアンカー動作を無効にするために使用します。

クリック時にターゲットへのジャンプ アクションのみを防止する方法はありますか?

私は試した:

  var hash = window.location.hash;
  var link = $('a');
  $('a').click(function() {
    e.preventDefault();
    hash = "#"+link.attr("href");
  });

しかし、うまくいきません: http://jsfiddle.net/ynts/LgcmB/

4

7 に答える 7

26
$(document).ready(function() {
  var hash = window.location.hash;
  var link = $('a');
  $('a').click(function(e) {
    e.preventDefault();
    hash = link.attr("href");
    window.location = hash;
  });
});

また、関数でイベント引数を指定する必要があります。eまたはという名前を付けることでevent、それを操作できます。

于 2013-01-06T19:42:22.770 に答える
14

これは、さまざまなクライアント UI ライブラリとフレームワークを備えたすべてのデスクトップおよびモバイル ブラウザーで一貫して機能する、私が思いついた唯一のソリューションです。スクロールが発生する前にウィンドウ座標を取得することで、現在のスクロール位置を元に戻して維持できます。

$('a').click(function (e) {
    var x = window.pageXOffset,
        y = window.pageYOffset;
    $(window).one('scroll', function () {
        window.scrollTo(x, y);
    })
});
于 2015-12-31T09:18:10.547 に答える
5

「ジャンプ」のみを防ぐには、アンカーで指定されているものとは異なる ID をターゲット要素に使用する必要があります。

たとえば、新しいタブの使用へのリンクの場合、

<a href="#new" />

ターゲット要素のマスクID

<div id="new-tab"></div>

次に、スクリプトで実際のハッシュにマスクを追加し、それを使用して要素を取得します。

$(window).on("hashchange", function(){
    var hash = this.location.hash;
    var mytab = $(hash + "-tab");
});

これにより、戻る/進むボタンで制御できるブラウザー履歴のハッシュ位置の変更が保持され、hashchangeユーザーがハッシュを指定してページに入ると、イベントでページの読み込み時に検出されます。

于 2014-08-07T08:41:26.953 に答える
3

onclick イベントをアンカーにバインドreturn false;し、結果として指定する必要があります。このreturn false;ステートメントにより、デフォルトのクリック動作 (ジャンプ) が機能しなくなります。ここで詳細情報を見つけることができます:ページをロードするときにアンカー「ジャンプ」を無効にする方法?

于 2013-07-30T15:04:21.613 に答える
2

関数にイベントを渡す必要があります。

         var hash = window.location.hash;
         var link = $('a');
         //pass event here
         $('a').click(function(e) {
           e.preventDefault();
           hash = "#"+link.attr("href");
         });
于 2013-01-06T19:43:54.810 に答える
0

matchwithを使用し^て、で始まることを検出できます#

$("a:link").on("click", function(e){
    if($(this).attr("href").match("^#")) {
        e.preventDefault();
        //some other stuff you want to do with the hash, like smooth scroll to anchor
        $('html, body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'fast');
    }
});
于 2019-10-04T09:19:14.440 に答える