2011-11-15 6 views
0

AjaxとFancybox.jsフォトビューアを一緒に使用する際に問題が発生しています。Ajax、html5、Fancybox.js

私はウェブサイトをハイパーリンク付きの標準ナビゲーションを備えたウェブ1.0として最初に設定しました。

html5ブラウザの場合、私はウェブ2.0体験を作成するjavascriptを使用しています。

JavaScriptが最初にハイジャックすると、HTMLの構文解析を行うPHPスクリプトを呼び出すXMLHttpRequestを作成し、置き換えるhtmlの部分だけを返すリンクonclickイベントがハイジャックされます。私はpushStateとpopStateを使って、前後のボタンを機能させています。

検索エンジンのスパイダーまでのリンクが標準HTMLページへの標準リンクにすぎないため、SEOを含むWeb 1.0のすべての利点に堪えながら、Ajax効果を生み出しています。

問題点は、Fancybox.jsを使用して写真を表示し、標準のURLでページにアクセスするとうまく動作しますが、AjaxスクリプトでHTMLにアクセスすると問題が発生することです。ここで

は、Ajaxのコード、

if (history.pushState) { 

function changeContent(url) { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
      document.getElementById('content').innerHTML = xmlhttp.responseText; 
     } 
    }; 
    xmlhttp.open("GET", "getContents.php?url=" + url, true); 
    xmlhttp.send(); 
} 





$(document).ready(function() { 
    var elems = null, 
     links = null, 
     link = null, 
     i; 

    elems = document.getElementById('nav'); 
    links = elems.getElementsByTagName('a'); 

    if (links) { 
     for (i = 0; i < links.length; i++) { 
      links[i].addEventListener("click", function(e) { 
        url = $(this).attr("href"); 
        var pathArray = window.location.pathname.split('/'); 
        var n = pathArray.length; 
        changeContent(url); 
        history.pushState(null, null, url); 
        e.preventDefault(); 

        var urlstr = window.location, 
        index = /index/g, 
        program = /program/g, 
        photos = /photos/g, 
        testimonials = /testimonials/g, 
        about = /about/g, 
        contact = /contact/g; 

        if (program.test(urlstr)){ 
         changeCurrentPage('#program'); 
         document.title = "Our Programs Kolibri Daycare"; 

        }else if (photos.test(urlstr)){ 
         changeCurrentPage('#photos'); 
         document.title = "Photos Kolibri Daycare"; 
         slideShow(); 

        }else if (testimonials.test(urlstr)){ 
         changeCurrentPage('#testimonials'); 
         document.title = "Tesimonials Kolibri Daycare"; 

        }else if (about.test(urlstr)){ 
         changeCurrentPage('#about'); 
         document.title = "About Kolibri Daycare"; 

        }else if (contact.test(urlstr)){ 
         changeCurrentPage('#contact'); 
         document.title = "Contact Kolibri Daycare"; 
        }else { 
         changeCurrentPage('#home'); 
         document.title = "Kolibri Daycare"; 
        } 
       }, false); 
      } 
     } 

     window.setTimeout(function() { 
     window.addEventListener("popstate", function(e) { 

     var pathArray = window.location.pathname.split('/'); 
     var n = pathArray.length; 
     if (pathArray[n-1]){ 
      changeContent(pathArray[n-1]); 
     }else { 
      changeContent('index.html'); 
     } 
    }, false); 
    }, 1); 
}); 
} 

と、彼女はそれがページのheadセクションにある

<script type="text/javascript"> 
//<![CDATA[ 
    $(document).ready(function() { 
     $("a[rel=example_group]").fancybox({ 
      'overlayShow' : false, 
      'cyclic'  : true, 
      'transitionIn'  : 'elastic', 
      'transitionOut'  : 'elastic' 
     }); 
    }); 
//]]> 
</script> 

、Fancybox.jsを呼び出すスクリプトです。

フォトリンクを持つhtmlがAjaxを介して取り込まれると、fancybox.jsを呼び出すスクリプトは含まれません。私は別の場所でそれを呼び出すことを試みたが、何も動作していないようだ。誰にもアイデアはありますか?

答えて

0

ajaxから追加された新しい要素でfancyboxを再初期化する必要があります。私はHTML5にページ全体をアップグレードし、jQueryによって提供されるいくつかのajax関数を使用するだけでは不思議ではありませんが、再初期化はこの行の後に挿入する必要があります(テストされていません):

document.getElementById('content').innerHTML = xmlhttp.responseText; 
$('#content').find("a[rel=example_group]").fancybox(); 
関連する問題