2

まず第一に、私は家の仕事をしました.私はすでにGoogleを検索し、方法を使用evt.stopPropagation();しましunbindたが、私の問題を解決していません... .

これが私のケースです:

いくつかのリンクを含む左側のサイドバーがあると想像してください。各リンクをクリックすると、次のようなコードで中央の列が ajax によってリロードされます。

<script>
$('.leftsidebar a').on('click', function(){
    var page = $(this).attr('class')
    $('#middleCol').load('loader.php?page='+ page);
});
</script>

したがって、左側のバーのタグをクリックするたびに、中央の列がタグclass.php をロードします。問題ありません。

真ん中の列にロードしているページでは、ページの最後にいくつかのjavascriptがあります。たとえばloader.php?page=test、ページ内でロードする場合test、いくつかの新しいjQuery行があります。例:

<script>
$('#blah').on('click', function(){
    $.ajax({
        type: 'POST',
        url: 'server.php',
        success: function(response){
            //blah  
        }   
    }); 
});
</script>

問題は、最初に左側のバーのタグをクリックしてテストページをロードすると、正常に機能し、#blah1つのリクエストのみをクリックするとに送信されますが、左側のサイドバーからserver.php別のページをクリックするとa戻ってきますをtestクリックするblahと、 ajax リクエストが に 2 回送信され、というserver.phpように...、もう一度試すと、リクエストは 3 回送信されます。

このような動作を防ぐにはどうすればよいですか? 解決策は何ですか?

助けていただければ幸いです。

4

5 に答える 5

5

この要素に複数のクリック ハンドラーがバインドされていない場合は、これも実行できます。

$('#blah').off('click').on('click', function(){...});

しかし、役に立たない/冗長なコードを含めない方がよいでしょう

于 2013-06-20T14:00:11.817 に答える
2

jsサイトのヘッダーにファイルを含むビューからファイルを分離する必要があります。

<script src="yourPath/actions.js"></script>

通常、これが正しい方法です。

.phpファイルに一度だけファイルを含めて、あなたが持っているような間違いを取り除きます。

loader.phpJavascript コードを含めないでください。必要がない。

于 2013-06-20T14:12:50.107 に答える
1

sidebarajax が起動するたびに、クリック イベントをに追加するスクリプトがページに追加#blahされます。したがって、#blahがクリックされると、これらのハンドラが起動されます。

プレーンな古い JavaScript を使用して onclick ハンドラーを割り当てることで毎回クリック イベントをオーバーライドするか、document.getElementById('blah').onclick = yourClickFunction最初にクリック イベントをオフにしてから jquery で新しいイベントを追加することができます。

$('#blah').off('click').on('click', yourFunction);

もう 1 つの提案は、サイドバー リンクにイベント デリゲーションを使用することです。その代わりに、次のように $('.leftsidebar a').on('click', function(){ します。 $('.leftsidebar').on('click', 'a', function(){

これにより、約 40 個のリンクすべてに対して単一のハンドラーが作成され、少し効率的になります。さらに、後で追加されるリンクには、クリック ハンドラーが自動的に追加されます。追加する必要はありません。

于 2013-06-20T14:20:58.447 に答える