0

私の main.js には、2 つのリンク関連のルールがあります。http://、mailto:、または # で始まらないすべてのリンクを処理する必要があります。load() を使用して $('#contentMain') のコンテンツを置き換えます。もう 1 つは http:// で始まるリンクを処理し、それらを新しいタブで開きます。

$("a:not([href^='http://'],[href^='#'],[href^='mailto:'])").click( function(e) { 
    console.log('Caught click, loading via AJAX');
    var url = $(this).attr("href");
    var title = ($(this).attr("title")) ? ': ' + $(this).attr("title") : '';
    e.preventDefault(); 
    if(url!=window.location){
       window.history.pushState({path:url},title,url);
       $('#contentMain').load(url);
        document.title = "It's New Orleans" + title;   
    }
});

$("a[href^='http://']").attr("target","_blank");

問題は、/contact のようなリンクが最初のルールIFをトリガーしないように思われます。/content が読み込まれているときに #contentMain 内で /contact をクリックすると、ルールが適用され、console.log() などが表示されます。

では、load() によって置き換えられたコンテンツが main.js の規則に従わないのはなぜでしょうか? これらのルールは現在 a の中にありますが、$(document).ready(function(){それを削除して、それが役立つかどうかを確認しました.

4

2 に答える 2

0

@KevinBのコメントによると、答えは次のように置き換えられます

$("body").delegate("a:not([href^='http://'],[href^='#'],[href^='mailto:'])", "click", function(e) { 
    console.log('Caught click, loading via AJAX');
    var url = $(this).attr("href");
    var title = ($(this).attr("title")) ? ': ' + $(this).attr("title") : '';
    e.preventDefault(); 
    if(url!=window.location){
       window.history.pushState({path:url},title,url);
       $('#contentMain').load(url);
        document.title = "It's New Orleans" + title;   
    }
});
于 2013-10-29T18:17:26.910 に答える