2

以前このフォーラムで質問されたコーディングの問題があります。

Ajax レスポンスから返された JavaScript 関数の呼び出し

しかし、満足のいく答えは得られませんでした。私が扱っている問題をより正確にするために、ここに詳細があります:

jquery を使用してドキュメント (HTML および JavaScript) を動的に読み込みます

var url = 'document.php';
$('#container').load(url);

document.php の例:

<form>
    <input name="firstname"></input>
</form>
<script>
    function dosomething()
    {
        console.log($('input[name=firstname]').val());
    }
</script>

* dosomething() 関数は後で呼び出したい関数です

そして、その document.php から関数を呼び出したいと思います。私の要件により、ドキュメントが読み込まれた後に関数を呼び出すのではなく、後で必要なときに呼び出すようにします。動的に読み込まれたため、DOM は関数を認識しません。この関数を正しく呼び出す方法は?

ありがとうございました

4

2 に答える 2

1

DOM が関数を認識しない

$(document).ready()これは、他の機能がリモート ページにラップされているように聞こえます。その場合、それらはメイン ページのコードから呼び出す範囲外であり、それらをreadyハンドラーの外に移動してグローバルにアクセスできるようにする必要があります。

編集:他の可能性

head 内のスクリプト タグ - html の後に body に移動するか、ajax コールバックで $.getScript を使用して取得します

于 2012-06-24T22:02:11.453 に答える
0

on-demand javascript(またはlazy-loading)と呼ばれる手法を実装しようとしていると思います。言い換えれば、ページは最初は小さなスクリプトだけをロードする必要があります。ただし、他のファイルで使用できるオブジェクトや関数を多数使用する必要がありますが、それらは必要なときにロードされます。

その場合は、警告する必要があります。おそらく、既存のコードを更新する必要があります。ある関数をそのまま呼び出すのではなく、最初にその存在を確認する必要があります。利用できない場合は、ロードされるのを待ちます。

if (typeof lazyObjects.someLazyFunction !== 'function') {
  lazyLoad('lazyFunction.js');
}
lazyObjects.someLazyFunction();

ここで重要な点は、lazyLoad が同期的であることです。つまり、関数を含むスクリプトが実際に読み込まれるまで待つ必要があります。そうしないと、この種のチェックを行っても、呼び出されたときに someLazyFunction が定義されません。

lazyFunction.jslazyObjectsには、必要なメソッドをプロパティとして追加して、を変更するコードが含まれます。

// in lazyFunction.js
lazyObjects.someLazyFunction = function() { ... }

これらの場合にglobal ( =window) オブジェクトを使用することは技術的には可能ですが、私は通常これを行いません。また、使用することもお勧めしません。

ほら、それほど単純ではありません。)この記事を読んで、この手法の詳細を確認することをお勧めします。また、確立されたコンポーネントを実際に使用してコードに実装することをお勧めします (リンクされた記事で言及されているものもあります)。

于 2012-06-24T22:31:31.593 に答える