2011-12-29 13 views
1

私は同様の主題に関してはSOに関するいくつかの記事を読んでいますが、私が望むように機能するようにコードを解読して取得することはできませんでした。動的なページ/コンテンツとjQueryの競合を置き換えます

ページコンテンツが変更され、動的に置き換えられるアプリケーションを作成しています。これは私が使用したプラグインへのリンクです(はい、スクリプトをプログラミングした開発者に連絡してみましたが、無駄にしていました)。 (css-tricks.com/dynamic-page-replacing-content)

{div id = "guts"}内に別のjQueryを実装しようとするまでは、それはすべての方法で動作します。たとえば、このスクリプトを追加しようとしていますが、起動していません。実際、このDIVでは他のjQueryスクリプトは動作しません。 (digitalbush.com/projects/masked-input-plugin)

特になhashchangeスクリプトを使って、いくつかの競合があるように見えます。私はこれが源だと信じています。ハッシュチェンジ/ダイナミックページスクリプトを無効にすると、マスクされた入力スクリプトは正常に動作します。

私が取り組んでいるアプリケーションへのリンクです。これは、ハッシュ変更を有効にした状態です。そして、メニュー項目をクリックすると、それは必要に応じて変更されます。ただし、マスクされた入力は機能しません。「電話番号」入力フィールドで有効になります。あなたがURLにハッシュマークを削除した場合 http://socialbungy.com/newsite/sweeps_temp_facebook/TAB_TEMP1/#enter.php

は、ページがロードされ、電話番号フィールド上のマスクされた入力は今しかし、動的ページの機能がなくなって、それが必要として動作します。 http://socialbungy.com/newsite/sweeps_temp_facebook/TAB_TEMP1/enter.php

私はこれが問題であることを知っているので、私は紛争を防ぐ方法を理解できません。 /#enter.phpのページソースを見ると、/enter.phpではなく/index.phpのソースコードがわかります。これも要因だと思います。これがスクリプトが開始しない理由ですか?

私のコードがここに掲載されている必要があります(これはたくさんあります)。リンクを手助けする方が簡単かもしれないので、構造を見ることができます。

私は間違っていますか? Btw、ページはPHPかもしれませんが、そこにPHPコードはありません。

編集: ここには疑わしいコードがあります。

$(function() { 
var reloadMask = function reloadMask() { 
    $(document).ready(function() { 
     $("#phone").mask("(999) 999-9999"); 
    }); 
} 
var newHash  = "", 
    $mainContent = $("#appContent"), 
    $pageWrap = $("#page-wrap"), 
    baseHeight = 0, 
    $el;   
$pageWrap.height($pageWrap.height()); 
baseHeight = $pageWrap.height() - $mainContent.height();  
    $("nav").delegate("a", "click", function() { 
     window.location.hash = $(this).attr("href"); 
     return false; 
    }); 
    $("#buttonWrap").delegate("a", "click", function() { 
     window.location.hash = $(this).attr("href"); 
     return false; 
    });  
$(window).bind('hashchange', function(){  
    newHash = window.location.hash.substring(1);   
    if (newHash) { 
     $mainContent 
      .find("#guts") 
      .slideToggle(500, function() { 
       $mainContent.hide().load(newHash + " #guts", function() { 
        $mainContent.slideToggle(500, function() { 
         $pageWrap.animate({ 
          height: baseHeight + $mainContent.height() + "px" 
         }); 
        }); 
        $("nav a").removeClass("current"); 
        $("nav a[href="+newHash+"]").addClass("current");      
       }); 
      }); 
    };   
});  
$(window).trigger('hashchange'); 
reloadMask(); 

});

+1

「私のコードはここに掲載する必要がありますが、これはたくさんあります」 - コードを減らすのが良い第一歩です。可能な限り小さなコードで問題を再現してください。何度もこれがあなたを解決に導きます。 – David

+0

オリジナルの投稿を編集して、疑わしい問題のあるコードを追加しました。しかし、コードの "たくさん"、私はアプリの構造を意味した。 :) –

+0

問題は、私たちの視点から(うまくいけば間違っていて、私たちが話しているように誰かが答えを構成しています)、この質問は現在「このコードには大きな壁があります。何が間違っているか教えてください。いくつかのデバッグが必要です。たとえば、あなたの「疑わしいコード」で、なぜそれが悪いと思われるのですか?あなたがそれにデバッグするなら、それは期待された振る舞いから逸脱していますか?問題を絞り込んでしまうまで、問題に関連していないコードを一度に1つずつ削除してください。 – David

答えて

0

私はそれを理解しました!まだいくつかのスクリプトでバグがありますが、動作します。以下のdynamicpage.jsスクリプトの一部にコメントを追加しました。そこに新しいスクリプトを入力すれば、コンテンツの読み込み時に再起動します。

$(window).bind('hashchange', function(){  
    newHash = window.location.hash.substring(1);   
    if (newHash) { 
     $mainContent 
      .find("#guts") 
      .slideToggle(500, function() { 
       $mainContent.hide().load(newHash + " #guts", function() { 
        $mainContent.slideToggle(500, function() { 
         $pageWrap.animate({ 
          height: baseHeight + $mainContent.height() + "px" 
         }); 
        }); 
        $("nav a").removeClass("current"); 
        $("nav a[href="+newHash+"]").addClass("current"); 

        //RE-FIRE OTHER SCRIPTS HERE 

       }); 
      }); 
    }; 
0

jQuery関数は、関数がロードされたときに、この特定のオブジェクトがコンテンツの一部ではなかったため、おそらく一部のオブジェクトでは機能しません。例えば、別の関数で、これらの機能をラップ

試してください:あなたはAJAX呼び出し行った後

var reloadAllFunctions = function reload() { 
// all the important functions 
} 

そしてreloadAllFunctions()を呼び出し、[.LOADを()]。

+0

ありがとう、私はこれを試してみましょう。どこでAJAX呼び出しの後にreloadAllFunctions()を呼びたいのですか? –

0

入力マスクがうまくいかない場合は、このコードをpageloaderscriptと同じファイルに入れてみてください(私はdynamicpage.jsだと思います)。 pageloader-functionにない限り、どこにでも置くことができます。

var reloadMask = function reloadMask() { 
    $(document).ready(function() { 
     $("#phone").mask("(999) 999-9999"); 
    }); 
} 

次に、 'reloadMask();を追加します。 'の後にスクリプトの最後の行に' $(window).trigger( 'hashchange'); 。

幸運。

+0

こんにちはエリック、助けてくれてありがとう!大変感謝しています。それは問題を解決していないようです。ここからどこに行くのかわからない。元の投稿のコードを更新しました。 –

関連する問題