2011-03-07 19 views
0

私は初心者のjqueryユーザーですので、これは少し経験がある方にとってはかなり簡単です。私は最近、divのコンテンツを別のhtmlページからロードするjqueryスクリプトを実装しました。これは美しく動作し、結果には本当に満足しています。私が今行っている問題は、LyteboxとFlexcrollスクリプトが読み込まれたコンテンツで動作しないことです。以下は、負荷内容のスクリプトです。私はちょうどJqueryがロードされたコンテンツは他のスクリプトでは機能しません

fleXenv.initByClass("flexcroll"); 
initLytebox(); 

をスクリプトの最後に追加できると思いました。これは、初めてコンテンツが読み込まれたときに機能しません。私は、ページ内のリンク切れをクリックして、それが再びこのスクリプトを実行している場合しかし、その後LyteboxとFlexcrollスクリプトがで蹴る。私は基本的にいつ、どのようLyteboxとFlexcrollスクリプトに

$(document).ready(function() { 
$('#nav li a').click(function(){ 

var toLoad = $(this).attr('href')+' #content'; 
$('#content').fadeOut('400',loadContent); 
$('#load').remove(); 
$('#wrapper').append('<span id="load">LOADING...</span>'); 
$('#load').fadeIn('normal'); 
function loadContent() { 
    $('#content').load(toLoad,'',showNewContent()); 
} 
function showNewContent() { 
    $('#content').fadeIn('400',hideLoader()); 
} 
function hideLoader() { 
    $('#load').fadeOut('normal'); 
} 
return false; 
}); 


}); 

どれでも役立つだろうをリフレッシュするために知っておく必要があります大変感謝しています。私は現在、3日間のディスペアのピットの底にいる。 Dreamweaverは私のばかを作っています!

答えて

2

をSussed:


はまた、私はここに引用符の内側にあまりにも多くのスペースがあると思います!私が過去3日間持っているのと同じように苦しんでいる人のために。ここに私の修正は次のとおりです。

私はHTMLヘッダーの新しいスクリプト作成:

$(document).ajaxComplete(function(){  
// fire when any Ajax requests complete }) 

をしてから、このスクリプト内で初期化するためにすべてのスクリプトを語りました。

+1

ロードされたHTMLページがajaxリクエストを行うとどうなりますか? _ajaxComplete_が呼び出されていますが、正しく処理されないと問題が発生する可能性があります。 –

0

同じセレクタを使用しているため、クラッシュしているようです。これは、ページの先頭でスクリプトの参照順序が正しくない場合にも発生します。

JQuery noconflictメソッドを使用してみてください。

http://api.jquery.com/jQuery.noConflict/

それは$関数をオーバーライドし、その後動作しない場合。説明はここにあります。

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

私はそれが役に立てば幸い。

+0

私はロジックを理解していると思いますが、実装するのが難しいです。私は追加しようとしました var j = jQuery.noConflict();スクリプトの始めに$を置き換えてください。 また、$ .noConflict();を追加しようとしました。 '偽を返す'の前に、そして矛盾のない他のスクリプトを初期化する。 まだ運がありません – user648466

+0

私は真剣な読書をしてきましたが、これは私の問題だと私は確信しています。私はnoConflictを実装しようとしましたが、私は明らかに詳細なガイドなしにこれを正しく行うにはあまりにもアマチュアです。だから私はおそらく、私のスクリプトが本当に小さいので、すべての$記号を 'jquery'に置き換えることでこれを行うことができると思ったが、これを行うときにスクリプトをまったく実行しないようだ。何か案は? – user648466

+0

私はnoConflict jQueryを実装することに成功しました。そして、これは問題ではないようです。新しいコンテンツがサイトの他のスクリプトをリロードした直後にロードされるように、コード行を記述する必要があります。誰か助けてもらえますか? – user648466

0

ローディングはの非同期的にになるため、スクリプトの末尾にこれらを追加することはできません。つまり、click関数が返ってくるまでには、まだ何もロードされていません。これはバックグラウンドで行われ、完了後にコールバック関数showNewContentが呼び出されます。

私はあなたが同様にその関数で初期化をしたいだろうと推測している:

function showNewContent() { 
    fleXenv.initByClass("flexcroll"); 
    initLytebox(); 
    $('#content').fadeIn('400',hideLoader()); 
} 

また、これに代えて:

$('#content').load(toLoad,'',showNewContent()); 

はこれを書きます

$('#content').load(toLoad,'',showNewContent); 

showNewContent関数を呼び出し、その結果をload関数に渡すと、showNewContent関数自体loadを渡したいとします。 JavaScriptではすべてがオブジェクトなので、これを行うことができます。

hideLoaderと同じことが起こります。それを

var toLoad = $(this).attr('href')+' #content'; 
+0

あなたの入力のおかげでトーマス、私は自分のコードを修正しましたが、まだゲームをプレイしていません。これは何を意味するのでしょうか? – user648466

関連する問題