2012-02-09 12 views
2

私はajaxでページを読み込んでいます。全ページ<html> <head> <body>を含む全ページ。 私はページが読み込まれると呼び出されるはずのすべてのスクリプトを呼び出す必要があります。しかし、ブラウザの中には、このウィンドウにロードされたものがいくつかあり、それらを再度実行しないことを記憶しています。既にロードされているスクリプトの削除/再ロード

ロードされたスクリプトをすべて削除するにはどうすればよいですか?

ページ全体を読み込む方法はありますが、以前のページのバックグラウンドで一部の古いオブジェクトを使用する方法はありますか?例えば、アップロードおよび他の通信。

コード: this.load =関数(ADR) {
this.iris()。

$.ajax({ 
      type: 'GET', 
      url: adr, 
      dataType: 'html', 
      success: function(data) 
      {  
      $("body").html(html); 
      } 
    }); 

編集:あなたの答えは良いですが、私は自分で解決できるwchich、何かを解決するため 申し訳ありませんがみんな、私は、おそらくそれは間違って書いています。だから私は違う方法でそれを伝えようとします。

  • 私はなぜ

    機能や他の何か

    に初期設定を保存することはできません - 私は、プラグインでJSを持っているいくつかのテンプレート、で働いていますので、(フォームのため、callendar ...)各ファイル。 各プラグインは、読み込まれたスクリプトですぐに匿名関数で初期化されます。

私はHTMLをajaxで読み込むと、この新しいHTMLで初期化されません。 (たとえば、リスナーを見つけられず、追加しません)。

+1

英和であり、理由を教えてくれてありがとう。 – Jindra

+0

私はなぜあなたが彼の質問をd​​ownvotedしたのか分からない。問題はかなり明らかです。 –

+0

@JanKuča私はdownvoteしなかったが、私はまだ質問がjavascriptの力学の理解の欠如を示していると思う。 – Christian

答えて

3

スクリプトを実行すると、スクリプトを実行できなくなり、DOM全体を置き換えてもスコープ内に保持されます。

オブジェクトwindow.a = new A();を作成し、DOMを$('body').html(html);に置き換えた場合でも、オブジェクトはまだwindow.aとしてアクセス可能です。

更新:

私はあなたのスクリプトの定義は<head>に含まれていると想像して、あなたがそれらを呼び出す一つの場所を持っています。

<!DOCTYPE html> 
<html> 
<head> 
    <script src="script1.js"></script> 
    <script src="script2.js"></script> 
</head> 
<body> 
    ... content ... 

    <script> 
window.onload = function() { 
    // initialization code here 
}; 
    </script> 
</body> 
</html> 

プレースヘッドにおける初期<script>もしばらく変数でfunctionを記憶します。次に、新しいコンテンツを読み込むときには、<body>の内容だけを置き換えて、関数を呼び出します。

<!DOCTYPE html> 
<html> 
<head> 
    <script src="script1.js"></script> 
    <script src="script2.js"></script> 

    <script> 
var a = function() { 
    // initialization code here 
}; 

var load = function (adr) { 
    $.ajax({ 
    type: 'GET', 
    url: adr, 
    dataType: 'html', 
    success: function (data) { 
     data = data.exec(/<body[^>]*?>(.*)<\/body>/i); 
     $("body").html(data); 

     a(); // call the function after each load 
    } 
    }); 
}; 
    </script> 
</head> 
<body onload="a()"> 
    ... content ... 
</body> 
</html> 
+0

返信いただきありがとうございます!しかし、私はスクリプトの問題を解決する方法を理解していません。例えば、少なくとも15のスクリプトの魔法使いがデザイン、メニュー、日付入力を処理しています。しかし、それらはそれぞれ別々のファイルにあり、匿名関数で初期化されているので、ページがajaxによって再び読み込まれたときに呼び出すことはできません。 – Jindra

+0

私の更新された回答を参照してください。 –

+0

ありがとうございますが、私は関数に初期化を保存できません。私はより良い理解のために私の質問を更新しました – Jindra

1

スクリプトを「実行しない」ための唯一の方法は、最初にそのように設計することです。

これは特に難しいことではありませんが、何らかの知識が必要です。これを有効にするための魔法のスイッチはありません。例えば

...

インデックス。HTML

<script src="script1.js"></script> 
<script src="script2.js"></script> 
<script> alert(pie); </script> 

script1.js

var pie = 'Hello world!'; 

script2.jsだから、要するに

var pie = 'Hello cruel world!'; 

、重要な前提条件は、あなたが維持していることだろう1つの罪の中のすべてのコードあなたは簡単に後で上書き/削除することができます。

+0

私はこれを知っていますが、ロードされているスクリプトを変更することはできません。それらはテンプレートの一部です。しかし、テキストを読み込んでスクリプトを動作させ、関数を保存してから評価することもできます。それは働くでしょうか?私は多くのjavascriptで経験はありません。私はちょうどいくつかの本を読んでいますが、読み込みテキストのようなものがあります。メニューを使って移動してください... – Jindra

+0

「アンロード」の部分は曖昧です。 javascriptでは、関数、プロパティ、その他のものを削除して上書きすることができます。また、「破損した」DOM(HTML部分)を「修正」することもできます。あなたが必要とするのは実際にこの世界から外れているわけではありませんが、現時点ではあまりにも漠然としています。 – Christian

0

初期化コードを直接スクリプトに入れて直ちに実行するのではなく、関数に入れて、必要に応じてその関数を呼び出します。ページをもう一度initialize()を呼び出して、 "再読み込み" されるたびに続いて

function initialize() { 
    alert('(Re)initializing'); 
} 

は一度これを含めます。

+0

お返事ありがとうございますが、これは私ができない考えの一つです。 – Jindra

関連する問題