0

これが私の機能です:

$(".link").click(function(event){
    event.preventDefault();
    event.stopPropagation();
    pageLoad = $(this).data('page');
    $('div#loading').fadeIn();
    $('div#content').load('pages/'+pageLoad);
});

呼び出されたページを表示するページに id コンテンツを含む div がありますが、ページが 2 回読み込まれるようです。ページの 1 つがシャッフルされた順序で何かを表示し、それが 2 回読み込まれるのを見ることができるので、これを知っています。興味深いことに、追加すると正常に動作します

throw new Error('something here');

次のように関数の最後まで:

// LINK CLICK
$(".link").click(function(event){
    event.preventDefault();
    event.stopPropagation();
    pageLoad = $(this).data('page');
    $('div#loading').fadeIn();
    $('div#content').load('pages/'+pageLoad);
    throw new Error('bla bla');
});

しかし、それ以外の場合は常に2回発火します。並べ替えなどをしてみましたが、まだ残っています。この機能を使用する私のリンクは単純です:

<a href="#" class="link" data-page="whatever.php">link</a>

jQuery 1.7.2 の 1 つのインスタンスのみが呼び出されています。私は何をすべきかについて無知です。live() および on() 関数も試してみましたが、まったく同じ結果が得られました。

!!! 編集 !!!

$(".link").click(function(event){
    event.preventDefault();
    event.stopPropagation();
    pageLoad = $(this).data('page');
    console.log('clicked');
    $('div#loading').fadeIn(function() {
        console.log('faded');
        $('div#content').load('pages/'+pageLoad+'.php', function() {
            console.log('loaded');
        });
    });
});

今...ここが本当に興味深いところです。私は自分のリンクを 1 つも変更していません

data-page="page.php"

ただに

data-page="page"

(.php が関数に直接含まれるようになったため)

意図したとおりに機能するはずのリンクをクリックすると、ロードされ、クリックされ、エラー コンソールでフェードアウトします。それぞれ1つだけです。ページが 2 回読み込まれます。ただし、機能しないはずのリンクをクリックすると(.phpが含まれているため)、それでも機能します!! 次のように、エラー コンソールに 3 つの単語とエラーが表示されます。

layout.js:25 clicked
layout.js:27 faded
jquery.min.js:4 GET pages/login1.php.php 404 (Not Found)
layout.js:29 loaded

しかし、ページはクリックするたびにコンテンツdivにロードされ、本来のように1回しかロードされません...

ここで確立したことから、リンクをクリックするとjqueryがpage.phpとpage.php.phpを取得するという奇妙な現象が発生しています

<a href="#" class="link" page="login1.php">

次のリンクを使用して、サーバー上にないページを取得しようとすると、証拠が表示されます。

<a href="#" class="link" data-page="no">no</a>

、ここで 2 つのエラーが表示されます。

jquery.min.js:4 GET pages/no 404 (Not Found)
jquery.min.js:4 GET pages/no.php 404 (Not Found)

これはどのように可能ですか?なぜjqueryはこれを行うのでしょうか? ここで何が起こっているのか説明できる人はいますか?

4

1 に答える 1

0

これが発生する理由を見つける最善の方法 (イベントのバブリングを防ぐためにできる限りのことを試みたように見えます) は、クリック ハンドラー内にブレークポイントを設定し、その時点までのスタック トレースを確認することです。

2 回実行された場合、2 回目の実行で、なぜ再び起動されたのかがわかります。

例外をスローすることで、jQuery ループから抜け出していると思います。

于 2012-05-11T02:23:18.350 に答える