0

私は、jquery に慣れていない html css デザイン タイプです。リンクのデフォルトの動作が無効になっているサイトを継承しました。次のコードが表示されます。

$('a').click(function(event) {
    event.preventDefault();

    var locationHref = window.location.href;
    var elementClick = $(this).attr("href");
    var destination = $(elementClick).offset().top;

    $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1000, function() {
        window.location.hash = elementClick
    });
      return false;

このコードをいじらずに、この 1 ページの Web サイトに通常のリンクを追加する必要があります (視差スクロールが有効になります)。このリンクをリンクごとに行う方法はありますか?

ところで、ここで解決策を見てきましたが、それらを完全に理解していないことを告白しなければなりません。ありがとう。

4

2 に答える 2

0

この方法でページ上のすべてのリンクを一括して無効にする理由がわかりません。そのようなコードを継承したことは残念です。そのコードに触れられないという意味なのか、それとも単に触れたくないのか、私にはわかりませんでした。

前者の場合、次の 2 つのオプションがあります。

1) 特定のリンクに対して、このクリック イベントのバインドを解除します。たとえば、コンテナ内にリンクがある場合#container、またはすべてのリンクに特定のクラスがある場合.class、次のようにすることができます。

$('#container a').off('click');
$('a.class').off('click');

これらのリンクは、継承されたクリック イベント ハンドラーから解放されます。

これに関する唯一の問題は、そのようなリンクにバインドされているすべてのクリック イベント ハンドラーをアンバインドすることです。継承されたイベントは名前空間化されていないため、これは避けられません。2番目のオプションは...

2) それにもかかわらず、ユーザーをリンクの HREF に転送することにより、継承されたハンドラーの既定のアクション防止をバイパスする 2 番目のクリック イベント ハンドラーをセットアップします。

$('a').on('click', function() { location.href = $(this).attr('href'); });
于 2012-08-07T11:29:30.227 に答える
0

これらの特別なリンクにdata-donthandle="true"属性を与えてみませんか。次に、jQuery でこの属性を確認します。属性が存在し、false の場合は、単純return true;にイベント ハンドラーの先頭にあります。

これにより、すでに提案されているように、javascript を介して onclick を調べて無効にする手間が省けます。

$('a').click(function(event) {
    if($(this).attr('data-donthandle')) {
        return true;
    }
    else {
       event.preventDefault();
       //code here for handling clicks
       alert('Stopped.');

       return false;
    }
    });​
于 2012-08-07T11:31:17.223 に答える