2016-06-13 10 views
1

"data-target"属性からファイル名をロードしてリンクをクリックすると更新される動的コンテナがあります。私は同じリンクを2度クリックすることは望んでいません(実際には同じページを2回ロードする)。同じJQueryロードファイルを2回ロードしない

これを防ぐ方法はありますか?

はJQuery:

$(document).ready(function(){ 
    // Set trigger and container variables 
    var trigger = $('#nav ul li a'), 
     container = $('#ajaxContainer'); 

    // Fire on click 
    trigger.on('click', function(){ 
     // Set $this for re-use. Set target from data attribute 
     var $this = $(this), 
      target = $this.data('target'); 

     // Load target page into container 
     container.load(target); 

     console.log(target); 

     // Stop normal link behavior 
     return false; 
    }); 
}); 

HTML:

<DOCTYPE html> 
<html> 
<head> 
    <title>My Site</title> 
    <link rel="stylesheet" type="text/css" href="/css/main.css" /> 
</head> 
<body> 
    <nav id="nav"> 
    <ul> 
     <li><a href="#" data-target="/home.php">Home</a></li> 
     <li><a href="#" data-target="/modules/Movies/index.php">Movies</a></li> 
    </ul> 
    </nav> 
    <div id="ajaxContainer"> 
    <img id="logo" src="/images/logo.png" /> 
    <?php include('home.php'); ?> 
    </div> 

    <script src="/js/jquery-1.12.4.min.js"></script> 
    <script src="/js/app.js"></script> 
</body> 
</html> 
+0

どのような種類あなたはファイルをロードしていますか?それはページにロードする必要がありますjsですか? – Roysh

+0

"data-target"属性を使用してPHPファイルにロードしています。 – Madness

答えて

1

load()は(コールバックパラメータに)完了すると、あなたがそれをdata-targetを削除して再設定することができます。

// Fire on click 
trigger.on('click', function(){ 
    // Set $this for re-use. Set target from data attribute 
    var $this = $(this), 
     target = $this.data('target'); 
    $this.removeAttr('data-target'); // delete de target 

    // Load target page into container only if it's target set 
    if(target) { 
     container.load(target); 
    } 
    console.log(target); 

    // Stop normal link behavior 
    return false; 
}); 
+0

一時的に属性が消えて再び表示されるのを見ることができますが、同じファイルが複数回読み込まれるのを実際には止めません。 – Madness

+0

このコードは一度読み込まれる準備ができており、読み込みが完了すると再び読み込めます –

+0

ページライフが終わるまで一度だけ実行し、 'load()'コールバック関数を削除する(ターゲットをリセットする) –

関連する問題