0

template.htmajax で読み込まれたコンテンツのブロックがいくつかあるページを作成しています。synchronously問題が発生したため、次のようにロードします。

    $.ajax({
        url: 'module.htm'
    })
    .done(function(r) {
        $('#moduleA').html(r);
    });

module.htmこれを数回行い、さまざまな異なるファイルをロードします。それらにはすべて、ヘッダー、本文などを含む標準のhtmlファイルが<!DOCTYPE html>あります。そこにはjQueryもたくさんあります。

これらのモジュールの一部には動的に追加された要素があり、主に.append()このように使用されます

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    $('div').myPluginMethod(); // utilizing the plugin here
});

特定の にプラグインを使用していますが$.fn.myPluginMethod、問題に気付きました:

問題:<script>のヘッダーを 使用してプラグインをロードし、module.htmそれを単独で実行すると (外部でtemplate.htm)、すべて正常に動作します。コンソールで入力$.fn.myPluginMethodすると、関数が返されます。

しかし、module.htmファイルを親template.htmページにロードすると、機能しなくなります。コンソールで、次のように入力すると return$.fn.myPluginMethodが返されますundefined

意味がありません。Firebug はプラグイン スクリプトが読み込まれていると表示しますが、なぜ失敗するのでしょうか?

私の理論 どういうわけか、それは私のajax-loadに関係していると思います。この.done()メソッドは、どういうわけかプラグインのオブジェクトを「見る」ことができないため、unknown method error. プラグインを手動で貼り付けると、次のように機能します。

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    // I can paste my raw plugin code here and it will work, but that's silly
}); 

この ajax ビジネスが問題を引き起こしている理由を理解しようとしています。プラグインが DOM に読み込まれると、すべてのスクリプトが動的であろうとなかろうと、そのメソッドを「見る」ことができるようになると思いました。

ありがとう。

4

1 に答える 1

2

リモートファイルから jQuery.js を再度ロードしているようです。これにより、メイン ページの jQuery オブジェクトが上書きされます。最初の jQuery オブジェクトに登録されたプラグインはすべて消去されます。

于 2013-02-02T02:19:01.627 に答える